Commit 204f8daeed

xackus <14938807+xackus@users.noreply.github.com>
2020-05-11 14:06:37
stage1: detect underflow in bigint_fits_in_bits
1 parent d4d5090
Changed files (2)
src/bigint.cpp
@@ -243,6 +243,7 @@ bool bigint_fits_in_bits(const BigInt *bn, size_t bit_count, bool is_signed) {
     }
 
     if (!is_signed) {
+        if(bn->is_negative) return false;
         size_t full_bits = bn->digit_count * 64;
         size_t leading_zero_count = bigint_clz(bn, full_bits);
         return bit_count >= full_bits - leading_zero_count;
test/compile_errors.zig
@@ -7411,4 +7411,12 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
     , &[_][]const u8{
         ":5:28: error: expected type '[]u8', found '*const [3:0]u8'",
     });
+
+    cases.add("integer underflow error",
+        \\export fn entry() void {
+        \\    _ = @intToPtr(*c_void, ~@as(usize, @import("std").math.maxInt(usize)) - 1);
+        \\}
+    , &[_][]const u8{
+        ":2:75: error: operation caused overflow",
+    });
 }