1
0
mirror of https://github.com/golang/go synced 2024-11-25 01:08:02 -07:00

gc: bug265

Fixes #700.

R=ken2
CC=golang-dev
https://golang.org/cl/839041
This commit is contained in:
Russ Cox 2010-03-29 15:27:59 -07:00
parent b880543ffa
commit 3908c16ffe
3 changed files with 20 additions and 8 deletions

View File

@ -328,6 +328,23 @@ samelist(NodeList *a, NodeList *b)
return a == b; return a == b;
} }
static int
paramoutheap(Node *fn)
{
NodeList *l;
for(l=fn->dcl; l; l=l->next) {
switch(l->n->class) {
case PPARAMOUT|PHEAP:
return 1;
case PAUTO:
case PAUTO|PHEAP:
// stop early - parameters are over
return 0;
}
}
return 0;
}
void void
walkstmt(Node **np) walkstmt(Node **np)
@ -441,11 +458,9 @@ walkstmt(Node **np)
case ORETURN: case ORETURN:
walkexprlist(n->list, &n->ninit); walkexprlist(n->list, &n->ninit);
if(curfn->type->outnamed && count(n->list) != 1) { if(n->list == nil)
if(n->list == nil) { break;
// print("special return\n"); if((curfn->type->outnamed && count(n->list) > 1) || paramoutheap(curfn)) {
break;
}
// assign to the function out parameters, // assign to the function out parameters,
// so that reorder3 can fix up conflicts // so that reorder3 can fix up conflicts
rl = nil; rl = nil;

View File

@ -192,6 +192,3 @@ bal
barCount != 1 barCount != 1
panic PC=xxx panic PC=xxx
BUG BUG
=========== bugs/bug265.go
BUG