aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--c.c3
-rw-r--r--mem.c3
-rw-r--r--test/test.c1
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;
}
//