mirror of
https://github.com/mirror/tinycc.git
synced 2025-02-04 06:30:10 +08: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)
|
if (size < 0)
|
||||||
tcc_error("unknown type size");
|
tcc_error("unknown type size");
|
||||||
}
|
}
|
||||||
if (flexible_array)
|
/* If there's a flex member and it was used in the initializer
|
||||||
size += flexible_array->type.ref->c * pointed_size(&flexible_array->type) + 1;
|
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 */
|
/* take into account specified alignment if bigger */
|
||||||
if (ad->a.aligned) {
|
if (ad->a.aligned) {
|
||||||
if (ad->a.aligned > align)
|
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