]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: fix incorrect error when using f(g()) form on ... args
authorDaniel Morsing <daniel.morsing@gmail.com>
Tue, 16 Jul 2013 09:43:11 +0000 (11:43 +0200)
committerDaniel Morsing <daniel.morsing@gmail.com>
Tue, 16 Jul 2013 09:43:11 +0000 (11:43 +0200)
Fixes #5358.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/11282044

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

index 54ce5b3ea677d041a126ae93debd03e9bbd1c52b..f232efdaf86ecb61c2ce0efd3059ac0d884fe773 100644 (file)
@@ -2131,9 +2131,9 @@ typecheckaste(int op, Node *call, int isddd, Type *tstruct, NodeList *nl, char *
                                for(; tn; tn=tn->down) {
                                        if(assignop(tn->type, tl->type->type, &why) == 0) {
                                                if(call != N)
-                                                       yyerror("cannot use %T as type %T in argument to %N%s", tn->type, tl->type, call, why);
+                                                       yyerror("cannot use %T as type %T in argument to %N%s", tn->type, tl->type->type, call, why);
                                                else
-                                                       yyerror("cannot use %T as type %T in %s%s", tn->type, tl->type, desc, why);
+                                                       yyerror("cannot use %T as type %T in %s%s", tn->type, tl->type->type, desc, why);
                                        }
                                }
                                goto out;
diff --git a/test/fixedbugs/issue5358.go b/test/fixedbugs/issue5358.go
new file mode 100644 (file)
index 0000000..75aa953
--- /dev/null
@@ -0,0 +1,17 @@
+// errorcheck
+
+// Copyright 2013 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.
+
+// issue 5358: incorrect error message when using f(g()) form on ... args.
+
+package main
+
+func f(x int, y ...int) {}
+
+func g() (int, []int)
+
+func main() {
+       f(g()) // ERROR "as type int in"
+}