]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: do not typecheck nil types in multiple assignment
authorDominik Honnef <dominik.honnef@gmail.com>
Wed, 22 Jan 2014 03:44:54 +0000 (22:44 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 22 Jan 2014 03:44:54 +0000 (22:44 -0500)
Fixes #6572.

LGTM=rsc, daniel.morsing, rsc
R=golang-codereviews, bradfitz, minux.ma, iant, rsc, gobot, daniel.morsing
CC=golang-codereviews
https://golang.org/cl/14516055

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

index 68d2c3404da5a368514dd8a74944946ce7ec092c..3c27d991543d4e1865c6eacdc225fd6807a283ae 100644 (file)
@@ -2814,7 +2814,7 @@ typecheckas2(Node *n)
                        n->op = OAS2FUNC;
                        t = structfirst(&s, &r->type);
                        for(ll=n->list; ll; ll=ll->next) {
-                               if(ll->n->type != T)
+                               if(t->type != T && ll->n->type != T)
                                        checkassignto(t->type, ll->n);
                                if(ll->n->defn == n && ll->n->ntype == N)
                                        ll->n->type = t->type;
diff --git a/test/fixedbugs/issue6572.go b/test/fixedbugs/issue6572.go
new file mode 100644 (file)
index 0000000..e75da54
--- /dev/null
@@ -0,0 +1,21 @@
+// errorcheck
+
+// Copyright 2014 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
+
+func foo() (T, T) { // ERROR "undefined"
+       return 0, 0
+}
+
+func bar() (T, string, T) { // ERROR "undefined"
+       return 0, "", 0
+}
+
+func main() {
+       var x, y, z int
+       x, y = foo()
+       x, y, z = bar() // ERROR "cannot (use type|assign) string"
+}