aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2016-09-19 18:33:44 +0200
committerMichael Matz <matz@suse.de>2016-12-15 17:47:11 +0100
commitb303a00ce01876dfa2ba3fe532db04d200168b9d (patch)
tree7a19fee83f931068aeacc4168348e9719d943fc7 /tccgen.c
parentd4d3144e7516421880faf362ed2693c00c309065 (diff)
downloadtinycc-b303a00ce01876dfa2ba3fe532db04d200168b9d.tar.gz
tinycc-b303a00ce01876dfa2ba3fe532db04d200168b9d.tar.bz2
Revert "Reject jumping inside stmtexprs"
Not fully thought out. You can't jump inside stmt exprs, but you can jump out of them. So there's a difference between undefined but declared labels at the end of stmt exprs and those defined inside. Additionally it should also be checked if a label defined inside a stmt expr was tentatively created as declared from outside. I'm not prepared doing that right now, so simply revert. This reverts commit 9160e4cab9147d77840cc44a285031fdb4640cf9.
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/tccgen.c b/tccgen.c
index 5515855..a811d11 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5418,7 +5418,7 @@ static void block(int *bsym, int *csym, int is_expr)
gsym(a);
gsym_addr(b, d);
} else if (tok == '{') {
- Sym *llabel, *glabel;
+ Sym *llabel;
int block_vla_sp_loc = vla_sp_loc, saved_vlas_in_scope = vlas_in_scope;
next();
@@ -5426,10 +5426,6 @@ static void block(int *bsym, int *csym, int is_expr)
s = local_stack;
llabel = local_label_stack;
++local_scope;
- /* Labels defined inside statement expressions aren't
- available from the outside, so record that as well. */
- if (is_expr)
- glabel = global_label_stack;
/* handle local labels declarations */
if (tok == TOK_LABEL) {
@@ -5455,8 +5451,6 @@ static void block(int *bsym, int *csym, int is_expr)
block(bsym, csym, is_expr);
}
}
- if (is_expr)
- label_pop(&global_label_stack, glabel);
/* pop locally defined labels */
label_pop(&local_label_stack, llabel);
/* pop locally defined symbols */