int ok, ntop;
Type *t, *tp, *missing, *have, *badtype;
Val v;
- char *why;
+ char *why, *desc, descbuf[64];
n = *np;
}
break;
}
- typecheckaste(OCALL, n->left, n->isddd, getinargx(t), n->list, "function argument");
+ if(snprint(descbuf, sizeof descbuf, "argument to %N", n->left) < sizeof descbuf)
+ desc = descbuf;
+ else
+ desc = "function argument";
+ typecheckaste(OCALL, n->left, n->isddd, getinargx(t), n->list, desc);
ok |= Etop;
if(t->outtuple == 0)
goto ret;
--- /dev/null
+// 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.
+
+// Issue 7129: inconsistent "wrong arg type" error for multivalued g in f(g())
+
+package main
+
+func f(int) {}
+
+func g() bool { return true }
+
+func h(int, int) {}
+
+func main() {
+ f(g()) // ERROR "in argument to f"
+ f(true) // ERROR "in argument to f"
+ h(true, true) // ERROR "in argument to h"
+}