Last fix didn't work for function f1int in the added testcase.
Showing the changes to tccgen.c (1 of 3 files). Show all
Unified · Split
| @@ -5846,8 +5846,12 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, · 5845 unmodified lines | ||
| 5846 | 5846 | if (size < 0) |
| 5847 | 5847 | tcc_error("unknown type size"); |
| 5848 | 5848 | } |
| 5849 | − if (flexible_array) | |
| 5850 | − size += flexible_array->type.ref->c * pointed_size(&flexible_array->type) + 1; | |
| 5849 | + /* If there's a flex member and it was used in the initializer | |
| 5850 | + adjust size. */ | |
| 5851 | + if (flexible_array && | |
| 5852 | + flexible_array->type.ref->c > 0) | |
| 5853 | + size += flexible_array->type.ref->c | |
| 5854 | + * pointed_size(&flexible_array->type); | |
| 5851 | 5855 | /* take into account specified alignment if bigger */ |
| 5852 | 5856 | if (ad->a.aligned) { |
| 5853 | 5857 | if (ad->a.aligned > align) |