aboutsummaryrefslogtreecommitdiffhomepage
path: root/c
diff options
context:
space:
mode:
author lemon<lsof@mailbox.org>2025-11-23 15:32:53 +0100
committer lemon<lsof@mailbox.org>2025-11-23 15:33:43 +0100
commit5e88a89ad7216608265b31458468a92c57fa0351 (patch)
tree0ffbb6260350818ba0a45400ae9af173994b5dee /c
parenta9e0174fb69f3ddc85cd9c510b68cec22b6ebf42 (diff)
c: fix runtime implicit-length array initializer
Diffstat (limited to 'c')
-rw-r--r--c/c.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/c/c.c b/c/c.c
index 2b2688d..a6c61fc 100644
--- a/c/c.c
+++ b/c/c.c
@@ -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);