From fd58b87e6141e9ef1a8000f0b4cdd62f85ba61e4 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 24 May 2025 05:35:21 +0300 Subject: [PATCH] avoid UB __shl{neative,x} --- src/singeli/src/accumulator.singeli | 2 ++ test/cases/prims.bqn | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/singeli/src/accumulator.singeli b/src/singeli/src/accumulator.singeli index 45438bf1..cc719946 100644 --- a/src/singeli/src/accumulator.singeli +++ b/src/singeli/src/accumulator.singeli @@ -176,6 +176,8 @@ def sum_accumulator{DE==i64, unr, VT=[k]SE==i32 if hasarch{'X86_64'}} = { # TODO def {accl, _, accl_tup, accl_vec} = acc_impl{mask_ident{+,0}, +, unr, VT, SE, 0} def {acch, _, acch_tup, acch_vec} = acc_impl{mask_ident{+,0}, +, unr, VT, SE, 0} + def __shl{a:T, b if issigned{T}} = T ~~ (ty_u{a} << b) + extend perv2{__shr} def me{'acc', ...M, v} = match (v) { {v:T if primtype{T} and M{0}==0} => acc += promote{DE, v} diff --git a/test/cases/prims.bqn b/test/cases/prims.bqn index d3346bdd..aa818a7f 100644 --- a/test/cases/prims.bqn +++ b/test/cases/prims.bqn @@ -533,6 +533,10 @@ b←1↓1∾a←"hello" ⋄ b ⌽⎊'e' ⥊⟜1⍟2 5 ⋄ a ≡○•Hash b %% 1 !"𝔽´𝕩: 𝕩 must be a list (3‿3 ≡ ≢𝕩)" % +´↕3‿3 !"𝕨𝔽´𝕩: 𝕩 must be a list (3‿3 ≡ ≢𝕩)" % 2+´↕3‿3 !"𝔽´𝕩: Identity not found" % •internal.Keep´⟨⟩ +%USE eqvar ⋄ +´_eqvar 1e3⥊1e2 %% 1e5 +%USE eqvar ⋄ +´_eqvar 1e3⥊↕100 %% 4950e1 +%USE eqvar ⋄ +´_eqvar 1e4⥊-↕100 %% ¯4950e2 +%USE eqvar ⋄ +´_eqvar 1e4⥊-1e9 %% ¯1e13 +⌜´↕0 %% <0 ×⌜´↕0 %% <1 +⌜⌜⌜´↕0 %% <<<0