summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-08-07 13:23:09 -0700
committerRuss Cox <rsc@golang.org>2009-08-07 13:23:09 -0700
commit0548edec1d65ef1cd09cc6004bab4a48b8a5cd41 (patch)
tree137271e219ec478387784bd51d239afaa37a4ed9
parentc4ad14412d7dec2c339ad0e0ebda9eca6c0c1b16 (diff)
downloadgolang-0548edec1d65ef1cd09cc6004bab4a48b8a5cd41.tar.gz
bug183 - embedded vs non-embedded struct field in eqtype
R=ken OCL=32888 CL=32888
-rw-r--r--src/cmd/gc/subr.c2
-rw-r--r--test/fixedbugs/bug183.go25
2 files changed, 27 insertions, 0 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 6595b45a3..e6ddaf63f 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -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
index 000000000..5c3ef4934
--- /dev/null
+++ b/test/fixedbugs/bug183.go
@@ -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"
+}
+