From 132b18e2b39feca3b90b1b13df2b4649b1661fd5 Mon Sep 17 00:00:00 2001 From: leesongun <12179851+leesongun@users.noreply.github.com> Date: Tue, 13 Jul 2021 16:16:57 +0900 Subject: [PATCH] Fix bigint_shl (#9305) --- src/stage1/bigint.cpp | 2 +- test/behavior/eval.zig | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/stage1/bigint.cpp b/src/stage1/bigint.cpp index 45c3a96623..3ab6d08d79 100644 --- a/src/stage1/bigint.cpp +++ b/src/stage1/bigint.cpp @@ -1352,7 +1352,7 @@ void bigint_shl(BigInt *dest, const BigInt *op1, const BigInt *op2) { if (op1->digit_count == 1 && shift_amt < 64) { dest->data.digit = op1_digits[0] << shift_amt; - if (dest->data.digit > op1_digits[0]) { + if (dest->data.digit >> shift_amt == op1_digits[0]) { dest->digit_count = 1; dest->is_negative = op1->is_negative; return; diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index 80a3bccb7c..566ed74e2d 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -573,6 +573,13 @@ test "comptime shlWithOverflow" { try expect(ct_shifted == rt_shifted); } +test "comptime shl" { + var a: u128 = 3; + var b: u7 = 63; + var c: u128 = 3 << 63; + try expectEqual(a << b, c); +} + test "runtime 128 bit integer division" { var a: u128 = 152313999999999991610955792383; var b: u128 = 10000000000000000000;