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 c9f1b1a..2e46724 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -481,8 +481,13 @@
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 @@
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 62fd95a..20c8599 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -131,6 +131,7 @@
typedef struct Sym Sym;
typedef struct Node Node;
typedef struct Type Type;
+typedef struct Dcl Dcl;
struct Type
{
@@ -211,6 +212,7 @@
Node* enter;
Node* exit;
Node* cvars; // closure params
+ Dcl* dcl; // outer autodcl
// OLITERAL/OREGISTER
Val val;
@@ -259,7 +261,6 @@
};
#define S ((Sym*)0)
-typedef struct Dcl Dcl;
struct Dcl
{
uchar op;