summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-03-30 22:26:00 -0700
committerRuss Cox <rsc@golang.org>2009-03-30 22:26:00 -0700
commit750c5c7a6b676c62601797045603051040578b0f (patch)
tree6ca5671679994b544941429fc469e49e7ed98ead /src
parent5601c6e3e495e328d934e423b67e2bbb886089ed (diff)
downloadgolang-750c5c7a6b676c62601797045603051040578b0f.tar.gz
fix http://b/1748082
package main var f = func(a, b int) int { return a + b } R=ken OCL=26935 CL=26935
Diffstat (limited to 'src')
-rw-r--r--src/cmd/gc/dcl.c6
-rw-r--r--src/cmd/gc/go.h3
2 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index c9f1b1aac..2e467249b 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 62fd95a12..20c859943 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;