diff options
Diffstat (limited to 'src/cmd/gc')
-rw-r--r-- | src/cmd/gc/dcl.c | 5 | ||||
-rw-r--r-- | src/cmd/gc/gen.c | 1 | ||||
-rw-r--r-- | src/cmd/gc/go.h | 3 |
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); |