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;