1
0
mirror of https://github.com/golang/go synced 2024-11-23 00:50:05 -07:00

cmd/gc: fix spurious 'not enough arguments to return' error

Fixes #6405

LGTM=rsc
R=rsc, iant
CC=golang-codereviews
https://golang.org/cl/72920046
This commit is contained in:
Jan Ziak 2014-03-14 16:42:42 +01:00
parent cbe777b2c7
commit 1483747f3c
2 changed files with 23 additions and 4 deletions

View File

@ -1065,6 +1065,7 @@ reswitch:
goto reswitch; goto reswitch;
} }
typecheck(&n->left, Erv | Etype | Ecall |(top&Eproc)); typecheck(&n->left, Erv | Etype | Ecall |(top&Eproc));
n->diag |= n->left->diag;
l = n->left; l = n->left;
if(l->op == ONAME && l->etype != 0) { if(l->op == ONAME && l->etype != 0) {
if(n->isddd && l->etype != OAPPEND) if(n->isddd && l->etype != OAPPEND)
@ -2165,6 +2166,7 @@ typecheckaste(int op, Node *call, int isddd, Type *tstruct, NodeList *nl, char *
if(tstruct->broke) if(tstruct->broke)
goto out; goto out;
n = N;
if(nl != nil && nl->next == nil && (n = nl->n)->type != T) if(nl != nil && nl->next == nil && (n = nl->n)->type != T)
if(n->type->etype == TSTRUCT && n->type->funarg) { if(n->type->etype == TSTRUCT && n->type->funarg) {
tn = n->type->type; tn = n->type->type;
@ -2239,10 +2241,14 @@ out:
return; return;
notenough: notenough:
if(n == N || !n->diag) {
if(call != N) if(call != N)
yyerror("not enough arguments in call to %N", call); yyerror("not enough arguments in call to %N", call);
else else
yyerror("not enough arguments to %O", op); yyerror("not enough arguments to %O", op);
if(n != N)
n->diag = 1;
}
goto out; goto out;
toomany: toomany:

View File

@ -0,0 +1,13 @@
// 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 6405: spurious 'not enough arguments to return' error
package p
func Open() (int, error) {
return OpenFile() // ERROR "undefined: OpenFile"
}