mirror of
https://github.com/frida/tinycc
synced 2024-12-25 14:36:49 +03:00
tccgen.c: Fix flex array members some more
Last fix didn't work for function f1int in the added testcase.
This commit is contained in:
parent
7e0ad4fdd2
commit
ceccd3ead3
8
tccgen.c
8
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)
|
||||
|
25
tests/tests2/80_flexarray.c
Normal file
25
tests/tests2/80_flexarray.c
Normal file
@ -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];
|
||||
}
|
0
tests/tests2/80_flexarray.expect
Normal file
0
tests/tests2/80_flexarray.expect
Normal file
Loading…
Reference in New Issue
Block a user