aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2016-03-11 22:35:44 +0100
committerMichael Matz <matz@suse.de>2016-03-11 22:35:44 +0100
commitceccd3ead3884afba95fd21ba1967d01acd2f2df (patch)
tree654a668d1f8925398ec7e277b05a9b8c9955ea88 /tccgen.c
parent7e0ad4fdd2d5359799f16732df07e00c8719c1e6 (diff)
downloadtinycc-ceccd3ead3884afba95fd21ba1967d01acd2f2df.tar.gz
tinycc-ceccd3ead3884afba95fd21ba1967d01acd2f2df.tar.bz2
tccgen.c: Fix flex array members some more
Last fix didn't work for function f1int in the added testcase.
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/tccgen.c b/tccgen.c
index 270d11c..11bf009 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5846,8 +5846,12 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r,
if (size < 0)
tcc_error("unknown type size");
}
- if (flexible_array)
- size += flexible_array->type.ref->c * pointed_size(&flexible_array->type) + 1;
+ /* If there's a flex member and it was used in the initializer
+ adjust size. */
+ if (flexible_array &&
+ flexible_array->type.ref->c > 0)
+ size += flexible_array->type.ref->c
+ * pointed_size(&flexible_array->type);
/* take into account specified alignment if bigger */
if (ad->a.aligned) {
if (ad->a.aligned > align)