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;
 
--- /dev/null
+// 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"
+}