From: Russ Cox Date: Tue, 31 Mar 2009 05:26:00 +0000 (-0700) Subject: fix http://b/1748082 X-Git-Tag: weekly.2009-11-06~1930 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=aacdc25399ed44ef3a2398e8ce2bfc26e1b46c4c;p=gostls13.git fix http://b/1748082 package main var f = func(a, b int) int { return a + b } R=ken OCL=26935 CL=26935 --- diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index c9f1b1aacb..2e467249bb 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -481,8 +481,13 @@ funclit0(Type *t) n = nod(OXXX, N, N); n->outer = funclit; + n->dcl = autodcl; funclit = n; + // new declaration context + autodcl = dcl(); + autodcl->back = autodcl; + funcargs(t); } @@ -592,6 +597,7 @@ funclit1(Type *type, Node *body) n->nbody = body; compile(n); funcdepth--; + autodcl = func->dcl; // if there's no closure, we can use f directly if(func->cvars == N) diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index 62fd95a124..20c859943e 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -131,6 +131,7 @@ struct Val typedef struct Sym Sym; typedef struct Node Node; typedef struct Type Type; +typedef struct Dcl Dcl; struct Type { @@ -211,6 +212,7 @@ struct Node Node* enter; Node* exit; Node* cvars; // closure params + Dcl* dcl; // outer autodcl // OLITERAL/OREGISTER Val val; @@ -259,7 +261,6 @@ struct Sym }; #define S ((Sym*)0) -typedef struct Dcl Dcl; struct Dcl { uchar op;