diff options
| author | Joe Soroka <gits@joesoroka.com> | 2011-07-22 02:09:28 -0700 |
|---|---|---|
| committer | Joe Soroka <gits@joesoroka.com> | 2011-07-22 02:09:28 -0700 |
| commit | 9b52e16a50e7ed86b4fec6736cd32421fa90785a (patch) | |
| tree | a90b4b7f7f3c9ac7df15c63787b537c1b5907739 | |
| parent | d7d845888808da6191ab6a70942fac6e3eb815ea (diff) | |
| download | tinycc-9b52e16a50e7ed86b4fec6736cd32421fa90785a.tar.gz tinycc-9b52e16a50e7ed86b4fec6736cd32421fa90785a.tar.bz2 | |
re-added negative-array-size testcase and fixed fix for it
| -rw-r--r-- | tccgen.c | 6 | ||||
| -rw-r--r-- | tests/tcctest.c | 2 |
2 files changed, 5 insertions, 3 deletions
@@ -3166,13 +3166,13 @@ static void post_type(CType *type, AttributeDef *ad) n = -1; t1 = 0; if (tok != ']') { - gexpr(); + if (!local_stack || nocode_wanted) + vpushi(expr_const()); + else gexpr(); if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) { n = vtop->c.i; if (n < 0) error("invalid array size"); - } else if (!local_stack) { - error("expected constant expression (variably modified array at file scope)"); } else { if (!is_integer_btype(vtop->type.t & VT_BTYPE)) error("size of variable length array should be an integer"); diff --git a/tests/tcctest.c b/tests/tcctest.c index 3581a7a..92f239e 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -2083,6 +2083,8 @@ void *bounds_checking_is_enabled() return (ca != cp + 1) ? cp : NULL; } +typedef int constant_negative_array_size_as_compile_time_assertion_idiom[(1 ? 2 : 0) - 1]; + void c99_vla_test(int size1, int size2) { #if defined __i386__ || defined __x86_64__ |
