From c71798c37690d73c91e7b345b0dd8e2a7738006e Mon Sep 17 00:00:00 2001 From: Joe Soroka Date: Mon, 11 Jul 2011 00:18:36 -0700 Subject: [PATCH] handle arrays with a flexible member but no initializer --- tccgen.c | 2 +- tests/tcctest.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tccgen.c b/tccgen.c index cb9765c8..35d5aaaa 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 57459bba..629bcaae 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); } -- 2.11.4.GIT