Commit 79d3780fbd

Mitchell Hashimoto <mitchell.hashimoto@gmail.com>
2022-03-17 05:22:02
stage2: bit_not on u0 is always 0
1 parent 1af51a0
Changed files (2)
src
test
behavior
src/value.zig
@@ -2977,6 +2977,11 @@ pub const Value = extern union {
 
         const info = ty.intInfo(target);
 
+        if (info.bits == 0) {
+            assert(val.isZero()); // Sema should guarantee
+            return val;
+        }
+
         // TODO is this a performance issue? maybe we should try the operation without
         // resorting to BigInt first.
         var val_space: Value.BigIntSpace = undefined;
test/behavior/math.zig
@@ -375,6 +375,9 @@ test "binary not" {
     try expect(comptime x: {
         break :x ~@as(u64, 2147483647) == 18446744071562067968;
     });
+    try expect(comptime x: {
+        break :x ~@as(u0, 0) == 0;
+    });
     try testBinaryNot(0b1010101010101010);
 }