compiler: Don't compare structs with blank non-comparable fields.
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 12 Dec 2013 18:45:24 +0000 (18:45 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 12 Dec 2013 18:45:24 +0000 (18:45 +0000)
From-SVN: r205937

gcc/go/gofrontend/types.cc
gcc/testsuite/go.test/test/cmp.go
gcc/testsuite/go.test/test/cmp6.go

index 33c23e5..d079565 100644 (file)
@@ -575,9 +575,6 @@ Type::are_compatible_for_comparison(bool is_equality_op, const Type *t1,
               p != fields->end();
               ++p)
            {
-             if (Gogo::is_sink_name(p->field_name()))
-               continue;
-
              if (!p->type()->is_comparable())
                {
                  if (reason != NULL)
index 5be6456..73de502 100644 (file)
@@ -43,8 +43,8 @@ func main() {
        var d string = "hel" // try to get different pointer
        d = d + "lo"
 
-       // exp/ssa/interp can't handle unsafe.Pointer.
-       if os.Getenv("GOSSAINTERP") != "" {
+       // go.tools/ssa/interp can't handle unsafe.Pointer.
+       if os.Getenv("GOSSAINTERP") == "" {
                if stringptr(c) == stringptr(d) {
                        panic("compiler too smart -- got same string")
                }
@@ -296,7 +296,7 @@ func main() {
        {
                var x = struct {
                        x int
-                       _ []int
+                       _ string
                        y float64
                        _ float64
                        z int
index 7d99aae..839c274 100644 (file)
@@ -53,7 +53,7 @@ func main() {
 
        // Comparison of structs should have a good message
        use(t3 == t3) // ERROR "struct|expected"
-       use(t4 == t4) // ok; the []int is a blank field
+       use(t4 == t4) // ERROR "cannot be compared|non-comparable"
 
        // Slices, functions, and maps too.
        var x []int