From 5d3c801fb5dd0af7366ae549b480741f2129d0c8 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 12 Jan 2022 16:10:41 +0200 Subject: [PATCH] fix memory leak in singeli arith fallback & each fills --- src/builtins/arithd.c | 6 +++--- src/utils/each.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/builtins/arithd.c b/src/builtins/arithd.c index 671e0c91..2c5448ce 100644 --- a/src/builtins/arithd.c +++ b/src/builtins/arithd.c @@ -236,9 +236,9 @@ static f64 pfmod(f64 a, f64 b) { u8 t = v(x)->type; return IS_SLICE(t)? c(TySlice,x)->a : c(TyArr,x)->a; } - #define SI_AA(N,S,BASE) R##S(x); usz rlen=avx2_##N##AA##_##S((void*)wp, (void*)xp, (void*)rp, ia); if(RARE(rlen!=ia)) goto BASE; dec(w);dec(x);return r; - #define SI_SA_I(N,S,W,BASE) R##S(x); usz rlen=avx2_##N##SA##_##S((W).u, (void*)xp, (void*)rp, ia); if(RARE(rlen!=ia)) goto BASE; dec(w);dec(x);return r; - #define SI_AS_I(N,S,X,BASE) R##S(w); usz rlen=avx2_##N##AS##_##S((void*)wp, (X).u, (void*)rp, ia); if(RARE(rlen!=ia)) goto BASE; dec(w);dec(x);return r; + #define SI_AA(N,S,BASE) R##S(x); usz rlen=avx2_##N##AA##_##S((void*)wp, (void*)xp, (void*)rp, ia); if(RARE(rlen!=ia)) { dec(r); goto BASE; } dec(w);dec(x);return r; + #define SI_SA_I(N,S,W,BASE) R##S(x); usz rlen=avx2_##N##SA##_##S((W).u, (void*)xp, (void*)rp, ia); if(RARE(rlen!=ia)) { dec(r); goto BASE; } dec(w);dec(x);return r; + #define SI_AS_I(N,S,X,BASE) R##S(w); usz rlen=avx2_##N##AS##_##S((void*)wp, (X).u, (void*)rp, ia); if(RARE(rlen!=ia)) { dec(r); goto BASE; } dec(w);dec(x);return r; #define SI_SA(NAME, EXPR) \ void* xp = tyany_ptr(x); \ switch(xe) { default: UD; \ diff --git a/src/utils/each.h b/src/utils/each.h index 414568d1..331f993a 100644 --- a/src/utils/each.h +++ b/src/utils/each.h @@ -27,7 +27,7 @@ static inline B arith_recd(BBB2B f, B w, B x) { if (noFill(fx)) return eachd_fn(f, bi_N, w, x); B fw = getFillQ(w); B r = eachd_fn(f, bi_N, w, x); - if (noFill(fw)) return r; + if (noFill(fw)) { dec(fx); return r; } if (CATCH) { freeThrown(); return r; } B fr = f(bi_N, fw, fx); popCatch();