]> Cypherpunks repositories - gostls13.git/commitdiff
gc: bug327
authorRuss Cox <rsc@golang.org>
Thu, 7 Apr 2011 22:53:47 +0000 (18:53 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 7 Apr 2011 22:53:47 +0000 (18:53 -0400)
Fixes #1674.

R=ken2
CC=golang-dev
https://golang.org/cl/4368057

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

index b4c58d10d72434653d797c8665febd6217df0d45..eb0fc3c624b43421bd20c45304ce462afe3d6b5a 100644 (file)
@@ -1889,8 +1889,9 @@ assignop(Type *src, Type *dst, char **why)
                return OCONVNOP;
        
        // 2. src and dst have identical underlying types
-       // and either src or dst is not a named type.
-       if(eqtype(src->orig, dst->orig) && (src->sym == S || dst->sym == S))
+       // and either src or dst is not a named type or
+       // both are interface types.
+       if(eqtype(src->orig, dst->orig) && (src->sym == S || dst->sym == S || src->etype == TINTER))
                return OCONVNOP;
 
        // 3. dst is an interface type and src implements dst.
diff --git a/test/fixedbugs/bug327.go b/test/fixedbugs/bug327.go
new file mode 100644 (file)
index 0000000..10f309d
--- /dev/null
@@ -0,0 +1,18 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2011 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 (
+       a interface{}
+       b interface{}
+)
+
+func main() {
+       x := a(1)
+       z := b(x)
+       _ = z
+}