diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 68d2c3404da5a368514dd8a74944946ce7ec092c..3c27d991543d4e1865c6eacdc225fd6807a283ae 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -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 index 0000000000000000000000000000000000000000..e75da54c99bfeaeb6760fbc7c652e9f15167510a --- /dev/null +++ b/test/fixedbugs/issue6572.go @@ -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" +}