push
github
FFI: Fix 64 bit shift fold rules. Thanks to Peter Cawley. (cherry picked from commit 9e0437240) For `IR_BSHR`, `IR_BROL`, `IR_BROR` during `kfold_int64arith()` the left argument is truncated down to 32 bits, which leads to incorrect results if the right argument is >= 32. Also, `IR_BSAR` does an unsigned shift rather than a signed shift, but since this case branch is unreachable, it is harmless for now. This patch fixes all misbehaviours (including possible for `IR_BSAR`) to preserve IR semantics. Operations in the `bit` library on 64-bit wide operands are incorrect in the DUALNUM mode, so the corresponding test is skipped. This will be fixed in the next commit. Sergey Kaplun: * added the description and the test for the problem Part of tarantool/tarantool#10199
5684 of 6026 branches covered (94.32%)
Branch coverage included in aggregate %.
21679 of 23433 relevant lines covered (92.51%)
2951096.49 hits per line