re-added negative-array-size testcase and fixed fix for it
This commit is contained in:
6
tccgen.c
6
tccgen.c
@ -3166,13 +3166,13 @@ static void post_type(CType *type, AttributeDef *ad)
|
|||||||
n = -1;
|
n = -1;
|
||||||
t1 = 0;
|
t1 = 0;
|
||||||
if (tok != ']') {
|
if (tok != ']') {
|
||||||
gexpr();
|
if (!local_stack || nocode_wanted)
|
||||||
|
vpushi(expr_const());
|
||||||
|
else gexpr();
|
||||||
if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
|
if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
|
||||||
n = vtop->c.i;
|
n = vtop->c.i;
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
error("invalid array size");
|
error("invalid array size");
|
||||||
} else if (!local_stack) {
|
|
||||||
error("expected constant expression (variably modified array at file scope)");
|
|
||||||
} else {
|
} else {
|
||||||
if (!is_integer_btype(vtop->type.t & VT_BTYPE))
|
if (!is_integer_btype(vtop->type.t & VT_BTYPE))
|
||||||
error("size of variable length array should be an integer");
|
error("size of variable length array should be an integer");
|
||||||
|
|||||||
@ -2083,6 +2083,8 @@ void *bounds_checking_is_enabled()
|
|||||||
{
|
{
|
||||||
char ca[10], *cp = ca-1;
|
char ca[10], *cp = ca-1;
|
||||||
return (ca != cp + 1) ? cp : NULL;
|
return (ca != cp + 1) ? cp : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
typedef int constant_negative_array_size_as_compile_time_assertion_idiom[(1 ? 2 : 0) - 1];
|
typedef int constant_negative_array_size_as_compile_time_assertion_idiom[(1 ? 2 : 0) - 1];
|
||||||
|
|
||||||
void c99_vla_test(int size1, int size2)
|
void c99_vla_test(int size1, int size2)
|
||||||
|
|||||||
Reference in New Issue
Block a user