Commit 890bdc53 authored by Russ Cox's avatar Russ Cox

gc: top-level closure bug

Fixes #2055.

R=ken2
CC=golang-dev
https://golang.org/cl/4816059
parent f91eb3c2
......@@ -84,6 +84,11 @@ typecheckclosure(Node *func, int top)
oldfn = curfn;
typecheck(&func->ntype, Etype);
func->type = func->ntype->type;
if(curfn == nil) {
xtop = list(xtop, func);
return;
}
if(func->type != T) {
curfn = func;
typechecklist(func->nbody, Etop);
......
......@@ -255,7 +255,7 @@ main(int argc, char *argv[])
resumecheckwidth();
for(l=xtop; l; l=l->next)
if(l->n->op == ODCLFUNC) {
if(l->n->op == ODCLFUNC || l->n->op == OCLOSURE) {
curfn = l->n;
saveerrors();
typechecklist(l->n->nbody, Etop);
......@@ -274,9 +274,10 @@ main(int argc, char *argv[])
while(closures) {
l = closures;
closures = nil;
for(; l; l=l->next)
for(; l; l=l->next) {
funccompile(l->n, 1);
}
}
for(l=externdcl; l; l=l->next)
if(l->n->op == ONAME)
......
// $G $D/$F.go && $L $F.$A && ./$A.out
// 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
var f = func() int {
type S int
return 42
}
func main() {
if f() != 42 {
panic("BUG: bug355")
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment