]> Cypherpunks repositories - gostls13.git/commitdiff
fix http://b/1748082
authorRuss Cox <rsc@golang.org>
Tue, 31 Mar 2009 05:26:00 +0000 (22:26 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 31 Mar 2009 05:26:00 +0000 (22:26 -0700)
package main
var f = func(a, b int) int { return a + b }

R=ken
OCL=26935
CL=26935

src/cmd/gc/dcl.c
src/cmd/gc/go.h

index c9f1b1aacbb64e2021208aa4126e717619e11146..2e467249bb0b664bd4991345aaa5f6661816537c 100644 (file)
@@ -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)
index 62fd95a124799cdcffab55e15df528daba6cd376..20c859943edc726c996007cf0d7b6acce493998e 100644 (file)
@@ -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;