]> Cypherpunks repositories - gostls13.git/commitdiff
bug183 - embedded vs non-embedded struct field in eqtype
authorRuss Cox <rsc@golang.org>
Fri, 7 Aug 2009 20:23:09 +0000 (13:23 -0700)
committerRuss Cox <rsc@golang.org>
Fri, 7 Aug 2009 20:23:09 +0000 (13:23 -0700)
R=ken
OCL=32888
CL=32888

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

index 6595b45a31a623456c8b143ab83a34f81504c92a..e6ddaf63fcab0dbca1ef3b145ceaa60d30bc2d7d 100644 (file)
@@ -1537,6 +1537,8 @@ eqtype1(Type *t1, Type *t2, int d, int names)
                                return 0;
                        if(t1 == T)
                                return 1;
+                       if(t1->embedded != t2->embedded)
+                               return 0;
                        if(t1->nname != N && t1->nname->sym != S) {
                                if(t2->nname == N || t2->nname->sym == S)
                                        return 0;
diff --git a/test/fixedbugs/bug183.go b/test/fixedbugs/bug183.go
new file mode 100644 (file)
index 0000000..5c3ef49
--- /dev/null
@@ -0,0 +1,25 @@
+//errchk $G $D/$F.go
+
+// Copyright 2009 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.
+
+package main
+
+type T int
+
+func f() {
+       var x struct { T };
+       var y struct { T T };
+       x = y   // ERROR "cannot"
+}
+
+type T1 struct { T }
+type T2 struct { T T }
+
+func g() {
+       var x T1;
+       var y T2;
+       x = y   // ERROR "cannot"
+}
+