From c1ab2a12cdaec4b701f2f9f994a174a6b838212c Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 8 Oct 2025 23:19:38 +0200 Subject: bugfix for initz --- c.c | 3 ++- mem.c | 3 ++- test/test.c | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/c.c b/c.c index 61a5df9..3ba964f 100644 --- a/c.c +++ b/c.c @@ -1477,7 +1477,8 @@ initializer(struct comp *cm, union type *ty, enum evalmode ev, bool globl, } if (ev != EVSTATICINI) { - res.zero = alloc(&cm->exarena, sizeof *res.zero * BSSIZE(isincomplete(*ty) ? 1 : typesize(*ty)), 0); + res.nzero = BSSIZE(isincomplete(*ty) ? 1 : typesize(*ty)); + res.zero = alloc(&cm->exarena, sizeof *res.zero * res.nzero, 0); memset(res.zero, 0xFF, sizeof *res.zero * BSSIZE(typesize(*ty))); } diff --git a/mem.c b/mem.c index 7faadc6..fad5523 100644 --- a/mem.c +++ b/mem.c @@ -140,7 +140,8 @@ freearena(struct arena **par) if ((*par)->dyn) free(*par); else { - assert(!prev); + if (prev) freearena(&prev); + (*par)->prev = NULL; (*par)->n = 0; return; } diff --git a/test/test.c b/test/test.c index 1a50690..c107101 100644 --- a/test/test.c +++ b/test/test.c @@ -104,6 +104,7 @@ int main() { str[1]&=~0x20; extern int printf(char *, ...); printf("%s %d,%d\n",str, arr[0],arr[5]); + int bleh[500]={}; return sizeof arr; } // -- cgit v1.2.3