diff options
| author | Michael Matz <matz@suse.de> | 2016-03-11 22:35:44 +0100 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2016-03-11 22:35:44 +0100 |
| commit | ceccd3ead3884afba95fd21ba1967d01acd2f2df (patch) | |
| tree | 654a668d1f8925398ec7e277b05a9b8c9955ea88 | |
| parent | 7e0ad4fdd2d5359799f16732df07e00c8719c1e6 (diff) | |
| download | tinycc-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.
| -rw-r--r-- | tccgen.c | 8 | ||||
| -rw-r--r-- | tests/tests2/80_flexarray.c | 25 | ||||
| -rw-r--r-- | tests/tests2/80_flexarray.expect | 0 |
3 files changed, 31 insertions, 2 deletions
@@ -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) diff --git a/tests/tests2/80_flexarray.c b/tests/tests2/80_flexarray.c new file mode 100644 index 0000000..1fc1a60 --- /dev/null +++ b/tests/tests2/80_flexarray.c @@ -0,0 +1,25 @@ +#include <stdio.h> +struct wchar { + char *data; char mem[]; +}; +struct wint { + char *data; int mem[]; +}; +int f1char (void) { + char s[9]="nonono"; + struct wchar q = {"bugs"}; + return !s[0]; +} +int f1int (void) { + char s[9]="nonono"; + struct wint q = {"bugs"}; + return !s[0]; +} +int main (void) { + char s[9]="nonono"; + static struct wchar q = {"bugs", {'c'}}; + //printf ("tcc has %s %s\n", s, q.data); + if (f1char() || f1int()) + printf ("bla\n"); + return !s[0]; +} diff --git a/tests/tests2/80_flexarray.expect b/tests/tests2/80_flexarray.expect new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/tests2/80_flexarray.expect |
