mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-27 06:10:06 +08:00
tests/tests2/78_vla_label.*: Add test.
This commit is contained in:
parent
cfef9ac3f5
commit
737f984213
34
tccgen.c
34
tccgen.c
@ -4468,8 +4468,11 @@ static void expr_land(void)
|
|||||||
expr_land();
|
expr_land();
|
||||||
gen_cast(&ctb);
|
gen_cast(&ctb);
|
||||||
} else {
|
} else {
|
||||||
|
int saved_nocode_wanted = nocode_wanted;
|
||||||
|
nocode_wanted = 1;
|
||||||
expr_land();
|
expr_land();
|
||||||
vpop();
|
vpop();
|
||||||
|
nocode_wanted = saved_nocode_wanted;
|
||||||
}
|
}
|
||||||
gen_cast(&cti);
|
gen_cast(&cti);
|
||||||
} else {
|
} else {
|
||||||
@ -4499,8 +4502,11 @@ static void expr_lor(void)
|
|||||||
next();
|
next();
|
||||||
gen_cast(&ctb);
|
gen_cast(&ctb);
|
||||||
if (vtop->c.i) {
|
if (vtop->c.i) {
|
||||||
|
int saved_nocode_wanted = nocode_wanted;
|
||||||
|
nocode_wanted = 1;
|
||||||
expr_lor();
|
expr_lor();
|
||||||
vpop();
|
vpop();
|
||||||
|
nocode_wanted = saved_nocode_wanted;
|
||||||
} else {
|
} else {
|
||||||
vpop();
|
vpop();
|
||||||
expr_lor();
|
expr_lor();
|
||||||
@ -4533,6 +4539,7 @@ static void expr_cond(void)
|
|||||||
if (tok == '?') {
|
if (tok == '?') {
|
||||||
next();
|
next();
|
||||||
if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
|
if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
|
||||||
|
int saved_nocode_wanted = nocode_wanted;
|
||||||
CType boolean;
|
CType boolean;
|
||||||
int c;
|
int c;
|
||||||
boolean.t = VT_BOOL;
|
boolean.t = VT_BOOL;
|
||||||
@ -4540,16 +4547,27 @@ static void expr_cond(void)
|
|||||||
gen_cast(&boolean);
|
gen_cast(&boolean);
|
||||||
c = vtop->c.i;
|
c = vtop->c.i;
|
||||||
vpop();
|
vpop();
|
||||||
if (tok != ':' || !gnu_ext) {
|
if (c) {
|
||||||
|
if (tok != ':' || !gnu_ext) {
|
||||||
|
vpop();
|
||||||
|
gexpr();
|
||||||
|
}
|
||||||
|
skip(':');
|
||||||
|
nocode_wanted = 1;
|
||||||
|
expr_cond();
|
||||||
vpop();
|
vpop();
|
||||||
gexpr();
|
nocode_wanted = saved_nocode_wanted;
|
||||||
|
} else {
|
||||||
|
vpop();
|
||||||
|
if (tok != ':' || !gnu_ext) {
|
||||||
|
nocode_wanted = 1;
|
||||||
|
gexpr();
|
||||||
|
vpop();
|
||||||
|
nocode_wanted = saved_nocode_wanted;
|
||||||
|
}
|
||||||
|
skip(':');
|
||||||
|
expr_cond();
|
||||||
}
|
}
|
||||||
if (!c)
|
|
||||||
vpop();
|
|
||||||
skip(':');
|
|
||||||
expr_cond();
|
|
||||||
if (c)
|
|
||||||
vpop();
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (vtop != vstack) {
|
if (vtop != vstack) {
|
||||||
|
@ -27,10 +27,19 @@ void f2(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void f3(void)
|
||||||
|
{
|
||||||
|
printf("%d\n", 0 ? printf("x1\n") : 11);
|
||||||
|
printf("%d\n", 1 ? 12 : printf("x2\n"));
|
||||||
|
printf("%d\n", 0 && printf("x3\n"));
|
||||||
|
printf("%d\n", 1 || printf("x4\n"));
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
f1(2);
|
f1(2);
|
||||||
f2();
|
f2();
|
||||||
|
f3();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,6 @@
|
|||||||
boom!
|
boom!
|
||||||
boom!
|
boom!
|
||||||
|
11
|
||||||
|
12
|
||||||
|
0
|
||||||
|
1
|
||||||
|
Loading…
Reference in New Issue
Block a user