aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccgen.c14
-rw-r--r--tests/tests2/82_nocode_wanted.c32
-rw-r--r--tests/tests2/82_nocode_wanted.expect4
3 files changed, 46 insertions, 4 deletions
diff --git a/tccgen.c b/tccgen.c
index 1dc5864..53ce185 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5605,8 +5605,9 @@ static void block(int *bsym, int *csym, int is_expr)
skip('(');
gsym(b);
gexpr();
- c = gvtst(0, 0);
- gsym_addr(c, d);
+ c = gvtst(0, 0);
+ if (!nocode_wanted)
+ gsym_addr(c, d);
skip(')');
gsym(a);
skip(';');
@@ -5678,7 +5679,10 @@ static void block(int *bsym, int *csym, int is_expr)
gexpr();
if ((vtop->type.t & VT_BTYPE) != VT_PTR)
expect("pointer");
- ggoto();
+ if (!nocode_wanted)
+ ggoto();
+ else
+ vtop--;
} else if (tok >= TOK_UIDENT) {
s = label_find(tok);
/* put forward definition if needed */
@@ -5689,7 +5693,9 @@ static void block(int *bsym, int *csym, int is_expr)
s->r = LABEL_FORWARD;
}
vla_sp_restore_root();
- if (s->r & LABEL_FORWARD)
+ if (nocode_wanted)
+ ;
+ else if (s->r & LABEL_FORWARD)
s->jnext = gjmp(s->jnext);
else
gjmp_addr(s->jnext);
diff --git a/tests/tests2/82_nocode_wanted.c b/tests/tests2/82_nocode_wanted.c
index 18b4914..a0ec890 100644
--- a/tests/tests2/82_nocode_wanted.c
+++ b/tests/tests2/82_nocode_wanted.c
@@ -27,6 +27,36 @@ static void kb_wait_2(void)
timeout--;
} while (timeout);
}
+static void kb_wait_2_1(void)
+{
+ unsigned long timeout = 2;
+ do {
+ (1 ?
+ printf("timeout=%ld\n", timeout) :
+ ({
+ do {
+ printf("error\n");
+ } while (1);
+ })
+ );
+ timeout--;
+ } while (timeout);
+}
+static void kb_wait_2_2(void)
+{
+ unsigned long timeout = 2;
+ do {
+ (1 ?
+ printf("timeout=%ld\n", timeout) :
+ ({
+ label:
+ printf("error\n");
+ goto label;
+ })
+ );
+ timeout--;
+ } while (timeout);
+}
static void kb_wait_3(void)
{
unsigned long timeout = 2;
@@ -73,6 +103,8 @@ int main()
printf("begin\n");
kb_wait_1();
kb_wait_2();
+ kb_wait_2_1();
+ kb_wait_2_2();
kb_wait_3();
kb_wait_4();
printf("end\n");
diff --git a/tests/tests2/82_nocode_wanted.expect b/tests/tests2/82_nocode_wanted.expect
index 3828ca8..c44d4ea 100644
--- a/tests/tests2/82_nocode_wanted.expect
+++ b/tests/tests2/82_nocode_wanted.expect
@@ -7,4 +7,8 @@ timeout=2
timeout=1
timeout=2
timeout=1
+timeout=2
+timeout=1
+timeout=2
+timeout=1
end