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);
|
||||
}
|
||||
} else if (tok == '{') {
|
||||
/*
|
||||
if (nocode_wanted)
|
||||
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 */
|
||||
|
||||
if (const_wanted)
|
||||
tcc_error("expected constant");
|
||||
/* save all registers */
|
||||
save_regs(0);
|
||||
/* statement expression : we do not accept break/continue
|
||||
|
||||
Reference in New Issue
Block a user