mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00: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:
parent
cbe777b2c7
commit
1483747f3c
2 changed files with 23 additions and 4 deletions
|
@ -1065,6 +1065,7 @@ reswitch:
|
|||
goto reswitch;
|
||||
}
|
||||
typecheck(&n->left, Erv | Etype | Ecall |(top&Eproc));
|
||||
n->diag |= n->left->diag;
|
||||
l = n->left;
|
||||
if(l->op == ONAME && l->etype != 0) {
|
||||
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)
|
||||
goto out;
|
||||
|
||||
n = N;
|
||||
if(nl != nil && nl->next == nil && (n = nl->n)->type != T)
|
||||
if(n->type->etype == TSTRUCT && n->type->funarg) {
|
||||
tn = n->type->type;
|
||||
|
@ -2239,10 +2241,14 @@ out:
|
|||
return;
|
||||
|
||||
notenough:
|
||||
if(call != N)
|
||||
yyerror("not enough arguments in call to %N", call);
|
||||
else
|
||||
yyerror("not enough arguments to %O", op);
|
||||
if(n == N || !n->diag) {
|
||||
if(call != N)
|
||||
yyerror("not enough arguments in call to %N", call);
|
||||
else
|
||||
yyerror("not enough arguments to %O", op);
|
||||
if(n != N)
|
||||
n->diag = 1;
|
||||
}
|
||||
goto out;
|
||||
|
||||
toomany:
|
||||
|
|
13
test/fixedbugs/issue6405.go
Normal file
13
test/fixedbugs/issue6405.go
Normal 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"
|
||||
}
|
Loading…
Reference in a new issue