]> Cypherpunks repositories - gostls13.git/commitdiff
gc: fix struct and array comparisons for new bool rules
authorAnthony Martin <ality@pbrane.org>
Mon, 19 Mar 2012 22:57:28 +0000 (15:57 -0700)
committerAnthony Martin <ality@pbrane.org>
Mon, 19 Mar 2012 22:57:28 +0000 (15:57 -0700)
The two optimizations for small structs and arrays
were missing the implicit cast from ideal bool.

Fixes #3351.

R=rsc, lvd
CC=golang-dev
https://golang.org/cl/5848062

src/cmd/gc/walk.c
test/fixedbugs/bug427.go [new file with mode: 0644]

index 0ed68f86b010763d10248ed0b6422d671de0f97c..5c8282b52e5e930a9aa62455581b0448bf414794 100644 (file)
@@ -2514,6 +2514,7 @@ walkcompare(Node **np, NodeList **init)
                        expr = nodbool(n->op == OEQ);
                typecheck(&expr, Erv);
                walkexpr(&expr, init);
+               expr->type = n->type;
                *np = expr;
                return;
        }
@@ -2534,6 +2535,7 @@ walkcompare(Node **np, NodeList **init)
                        expr = nodbool(n->op == OEQ);
                typecheck(&expr, Erv);
                walkexpr(&expr, init);
+               expr->type = n->type;
                *np = expr;
                return;
        }
diff --git a/test/fixedbugs/bug427.go b/test/fixedbugs/bug427.go
new file mode 100644 (file)
index 0000000..1239e7a
--- /dev/null
@@ -0,0 +1,39 @@
+// compile
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// http://code.google.com/p/go/issues/detail?id=3351
+
+package main
+
+// struct with four fields of basic type
+type S struct {a, b, c, d int}
+
+// struct with five fields of basic type
+type T struct {a, b, c, d, e int}
+
+// array with four elements
+type A [4]int
+
+// array with five elements
+type B [5]int
+
+func main() {
+       var i interface{}
+
+       var s1, s2 S
+       i = s1 == s2
+
+       var t1, t2 T
+       i = t1 == t2
+
+       var a1, a2 A
+       i = a1 == a2
+
+       var b1, b2 B
+       i = b1 == b2
+
+       _ = i
+}