diff options
| author | 2025-10-08 23:19:38 +0200 | |
|---|---|---|
| committer | 2025-10-08 23:19:38 +0200 | |
| commit | c1ab2a12cdaec4b701f2f9f994a174a6b838212c (patch) | |
| tree | 97f0892788a2ef2ed335e07b7d673654d8cc7c3e | |
| parent | 68ecc26d0257e2b2df39eeedf637e6ac6f8ab232 (diff) | |
bugfix for initz
| -rw-r--r-- | c.c | 3 | ||||
| -rw-r--r-- | mem.c | 3 | ||||
| -rw-r--r-- | test/test.c | 1 |
3 files changed, 5 insertions, 2 deletions
@@ -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))); } @@ -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; } // |