aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Soroka <gits@joesoroka.com>2011-07-11 00:18:36 -0700
committerJoe Soroka <gits@joesoroka.com>2011-07-11 00:18:36 -0700
commitc71798c37690d73c91e7b345b0dd8e2a7738006e (patch)
treebe8d2c8c42d6f2e7feb6ab725f2957a74b1571e6
parentcd3d1a45f34be3c9a358f1743bcaf8aac897992e (diff)
downloadtinycc-c71798c37690d73c91e7b345b0dd8e2a7738006e.tar.gz
tinycc-c71798c37690d73c91e7b345b0dd8e2a7738006e.tar.bz2
handle arrays with a flexible member but no initializer
-rw-r--r--tccgen.c2
-rw-r--r--tests/tcctest.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/tccgen.c b/tccgen.c
index cb9765c..35d5aaa 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5146,7 +5146,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r,
literals). It also simplifies local
initializers handling */
tok_str_new(&init_str);
- if (size < 0 || flexible_array) {
+ if (size < 0 || (flexible_array && has_init)) {
if (!has_init)
error("unknown type size");
/* get all init string */
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 57459bb..629bcaa 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -1301,6 +1301,8 @@ struct complexinit2 {
int b[];
};
+struct complexinit2 cix20;
+
struct complexinit2 cix21 = {
.a = 3000,
.b = { 3001, 3002, 3003 }
@@ -1410,7 +1412,7 @@ void init_test(void)
cix[0].b[1].a, cix[0].b[1].b,
cix[0].b[2].a, cix[0].b[2].b);
printf("cix2: %d %d\n", cix21.b[2], cix22.b[5]);
- printf("sizeof cix21 %d, sizeof cix22 %d\n", sizeof cix21, sizeof cix22);
+ printf("sizeof cix20 %d, cix21 %d, sizeof cix22 %d\n", sizeof cix20, sizeof cix21, sizeof cix22);
}