tccgen.c: Give error if statement expression found when const wanted.
Some test cases:
#define SE ({ switch (0) { } 0; })
// Should give error:
int x = SE;
void f(void) { static int x = SE; }
void f(void) { enum e { a = SE }; }
void f(void) { switch (0) { case SE: break; } }
// Correct:
int f(void) { return SE; }
int f(void) { return sizeof(SE); }
This commit is contained in:
8
tccgen.c
8
tccgen.c
@ -3831,12 +3831,8 @@ ST_FUNC void unary(void)
|
|||||||
gen_cast(&type);
|
gen_cast(&type);
|
||||||
}
|
}
|
||||||
} else if (tok == '{') {
|
} else if (tok == '{') {
|
||||||
/*
|
if (const_wanted)
|
||||||
if (nocode_wanted)
|
tcc_error("expected constant");
|
||||||
tcc_error("statement expression in global scope"); */
|
|
||||||
/* this check breaks compilation of the linux 2.4.26 with the meesage:
|
|
||||||
linux/include/net/tcp.h:945: error: statement expression in global scope */
|
|
||||||
|
|
||||||
/* save all registers */
|
/* save all registers */
|
||||||
save_regs(0);
|
save_regs(0);
|
||||||
/* statement expression : we do not accept break/continue
|
/* statement expression : we do not accept break/continue
|
||||||
|
|||||||
Reference in New Issue
Block a user