mirror of
https://github.com/golang/go
synced 2024-11-22 08:04:39 -07:00
gc: fix return variable named _
Fixes #1712. R=ken2 CC=golang-dev https://golang.org/cl/4445055
This commit is contained in:
parent
7879d3118c
commit
815a1b84c7
@ -560,6 +560,7 @@ funcargs(Node *nt)
|
|||||||
{
|
{
|
||||||
Node *n;
|
Node *n;
|
||||||
NodeList *l;
|
NodeList *l;
|
||||||
|
int gen;
|
||||||
|
|
||||||
if(nt->op != OTFUNC)
|
if(nt->op != OTFUNC)
|
||||||
fatal("funcargs %O", nt->op);
|
fatal("funcargs %O", nt->op);
|
||||||
@ -589,6 +590,7 @@ funcargs(Node *nt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// declare the out arguments.
|
// declare the out arguments.
|
||||||
|
gen = 0;
|
||||||
for(l=nt->rlist; l; l=l->next) {
|
for(l=nt->rlist; l; l=l->next) {
|
||||||
n = l->n;
|
n = l->n;
|
||||||
if(n->op != ODCLFIELD)
|
if(n->op != ODCLFIELD)
|
||||||
@ -596,6 +598,11 @@ funcargs(Node *nt)
|
|||||||
if(n->left != N) {
|
if(n->left != N) {
|
||||||
n->left->op = ONAME;
|
n->left->op = ONAME;
|
||||||
n->left->ntype = n->right;
|
n->left->ntype = n->right;
|
||||||
|
if(isblank(n->left)) {
|
||||||
|
// Give it a name so we can assign to it during return.
|
||||||
|
snprint(namebuf, sizeof(namebuf), ".anon%d", gen++);
|
||||||
|
n->left->sym = lookup(namebuf);
|
||||||
|
}
|
||||||
declare(n->left, PPARAMOUT);
|
declare(n->left, PPARAMOUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
test/fixedbugs/bug331.go
Normal file
36
test/fixedbugs/bug331.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug331
|
||||||
|
|
||||||
|
// Copyright 2011 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 main
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
func f() (_ string, x float64, err os.Error) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func g() (_ string, x float64, err os.Error) {
|
||||||
|
return "hello", 3.14, os.EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ func() (string, float64, os.Error) = f
|
||||||
|
var _ func() (string, float64, os.Error) = g
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
x, y, z := g()
|
||||||
|
if x != "hello" || y != 3.14 || z != os.EOF {
|
||||||
|
println("wrong", x, len(x), y, z)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
issue 1712
|
||||||
|
|
||||||
|
bug331.go:12: cannot use "hello" (type string) as type float64 in assignment
|
||||||
|
bug331.go:12: cannot use 0 (type float64) as type os.Error in assignment:
|
||||||
|
float64 does not implement os.Error (missing String method)
|
||||||
|
bug331.go:12: error in shape across RETURN
|
||||||
|
*/
|
Loading…
Reference in New Issue
Block a user