diff --git a/src/builtins/cells.c b/src/builtins/cells.c index 25a8d1c9..c27bc9b3 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -225,16 +225,31 @@ static NOINLINE B select_cells(usz n, B x, usz cam, usz k, bool leaf) { // n {le return taga(ra); } -static void set_column_typed(void* rp, B v, u8 e, ux p, ux stride, ux n) { +static void set_column_typed(void* rp, B v, u8 e, ux p, ux stride, ux n) { // may write to all elements 0 ≤ i < stride×n, and after that too for masked stores + assert(p < stride); switch(e) { default: UD; - case el_bit: NOVECTORIZE for (usz i=0; i64) goto bit_special; + NOVECTORIZE for (usz i=0; ia, f, e, p, csz, cam); + } else { + set_column_typed(r->a, f, e, p, csz, cam); + } return mut_fcd(r, x); } diff --git a/test/cases/fuzz.bqn b/test/cases/fuzz.bqn index 84004836..a25675f0 100644 --- a/test/cases/fuzz.bqn +++ b/test/cases/fuzz.bqn @@ -11,3 +11,14 @@ # ∾𝕩 not getting garbage ≠{𝕊: ! ∧´1=⥊∾⎊1 ⥊⟜1¨ (4•rand.Range 3) •rand.Range¨ 4}¨↕10000 ) + +( + # bitarr »˘ / «˘ + _test ← {𝔽_𝕣𝕩: + a←(1+2•rand.Range 100)•rand.Range 2 + v←•rand.Range 2 + v‿a ! (v 𝔽○•internal.Keep˘ a) ≡ v 𝔽˘ a + } + » _test¨ ↕10000 + « _test¨ ↕10000 +)