From 79d3780fbda475a50d6e0ca53d51c9e7c7690ab1 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 16 Mar 2022 21:22:02 -0700 Subject: [PATCH] stage2: bit_not on u0 is always 0 --- src/value.zig | 5 +++++ test/behavior/math.zig | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/value.zig b/src/value.zig index d63452ee56..005f1f1ffd 100644 --- a/src/value.zig +++ b/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; diff --git a/test/behavior/math.zig b/test/behavior/math.zig index 05decb348e..5b91ceed47 100644 --- a/test/behavior/math.zig +++ b/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); }