summaryrefslogtreecommitdiff
path: root/src/cmd/gc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc')
-rw-r--r--src/cmd/gc/dcl.c5
-rw-r--r--src/cmd/gc/gen.c1
-rw-r--r--src/cmd/gc/go.h3
3 files changed, 9 insertions, 0 deletions
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index 99af18d9f..8e790ef08 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -1233,9 +1233,14 @@ funccompile(Node *n, int isclosure)
stksize = 0;
dclcontext = PAUTO;
funcdepth = n->funcdepth + 1;
+ hasgoto = 0;
compile(n);
+ if(hasgoto)
+ clearstk();
curfn = nil;
funcdepth = 0;
dclcontext = PEXTERN;
}
+
+
diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c
index 8ad6c437d..857fcbef9 100644
--- a/src/cmd/gc/gen.c
+++ b/src/cmd/gc/gen.c
@@ -205,6 +205,7 @@ gen(Node *n)
break;
case OGOTO:
+ hasgoto = 1;
newlab(OGOTO, n, N);
gjmp(P);
break;
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index f58b76789..4b4e8fcd1 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -1246,3 +1246,6 @@ void zhist(Biobuf *b, int line, vlong offset);
void zname(Biobuf *b, Sym *s, int t);
void data(void);
void text(void);
+
+EXTERN int hasgoto;
+void clearstk(void);