diff options
| author | 2025-11-23 15:32:53 +0100 | |
|---|---|---|
| committer | 2025-11-23 15:33:43 +0100 | |
| commit | 5e88a89ad7216608265b31458468a92c57fa0351 (patch) | |
| tree | 0ffbb6260350818ba0a45400ae9af173994b5dee | |
| parent | a9e0174fb69f3ddc85cd9c510b68cec22b6ebf42 (diff) | |
c: fix runtime implicit-length array initializer
| -rw-r--r-- | c/c.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -1717,9 +1717,10 @@ initializer(struct comp *cm, union type *ty, enum evalmode ev, bool globl, } else { uint siz; if (isincomplete(*ty)) { - if (!ip->arrlen) + uint len = ip->arrlen > ip->cur->idx ? ip->arrlen : ip->cur->idx; + if (!len) error(&span, "initializer creates a zero-sized array"); - *ty = mkarrtype(typechild(*ty), ty->flag & TFCHLDQUAL, ip->arrlen > 0 ? ip->arrlen : 1); + *ty = mkarrtype(typechild(*ty), ty->flag & TFCHLDQUAL, len); } assert(arraylength(res.zero) == 1); |