cmd/gc: give an error if only one argument is given to complex()

Fixes #8501

Change-Id: I0dbbdded7f7924351c3d1841d60cb5c934b295b7
Reviewed-on: https://go-review.googlesource.com/2143
Reviewed-by: Chris Manghane <cmang@golang.org>
This commit is contained in:
Shenghou Ma 2014-12-28 19:18:54 -05:00 committed by Minux Ma
parent 8fa0cf1db2
commit cb1897a58c
2 changed files with 22 additions and 0 deletions

View file

@ -1233,6 +1233,10 @@ reswitch:
ok |= Erv;
if(count(n->list) == 1) {
typechecklist(n->list, Efnstruct);
if(n->list->n->op != OCALLFUNC && n->list->n->op != OCALLMETH) {
yyerror("invalid operation: complex expects two arguments");
goto error;
}
t = n->list->n->left->type;
if(t->outtuple != 2) {
yyerror("invalid operation: complex expects two arguments, %N returns %d results", n->list->n, t->outtuple);

View file

@ -0,0 +1,18 @@
// 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 p
type T struct {
f float64
}
var t T
func F() {
_ = complex(1.0) // ERROR "invalid operation|not enough arguments"
_ = complex(t.f) // ERROR "invalid operation|not enough arguments"
}