Commit 59418d1bf6

Andrew Kelley <andrew@ziglang.org>
2022-02-09 06:09:41
Sema: fix Value.intFitsInType for comptime int
1 parent 470c8ca
Changed files (2)
src
test
behavior
src/value.zig
@@ -1331,12 +1331,16 @@ pub const Value = extern union {
 
             .one,
             .bool_true,
-            => {
-                const info = ty.intInfo(target);
-                return switch (info.signedness) {
-                    .signed => info.bits >= 2,
-                    .unsigned => info.bits >= 1,
-                };
+            => switch (ty.zigTypeTag()) {
+                .Int => {
+                    const info = ty.intInfo(target);
+                    return switch (info.signedness) {
+                        .signed => info.bits >= 2,
+                        .unsigned => info.bits >= 1,
+                    };
+                },
+                .ComptimeInt => return true,
+                else => unreachable,
             },
 
             .int_u64 => switch (ty.zigTypeTag()) {
@@ -1390,13 +1394,17 @@ pub const Value = extern union {
             .decl_ref,
             .function,
             .variable,
-            => {
-                const info = ty.intInfo(target);
-                const ptr_bits = target.cpu.arch.ptrBitWidth();
-                return switch (info.signedness) {
-                    .signed => info.bits > ptr_bits,
-                    .unsigned => info.bits >= ptr_bits,
-                };
+            => switch (ty.zigTypeTag()) {
+                .Int => {
+                    const info = ty.intInfo(target);
+                    const ptr_bits = target.cpu.arch.ptrBitWidth();
+                    return switch (info.signedness) {
+                        .signed => info.bits > ptr_bits,
+                        .unsigned => info.bits >= ptr_bits,
+                    };
+                },
+                .ComptimeInt => return true,
+                else => unreachable,
             },
 
             else => unreachable,
test/behavior/slice.zig
@@ -245,8 +245,6 @@ test "C pointer slice access" {
 }
 
 test "comptime slices are disambiguated" {
-    if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
-
     try expect(sliceSum(&[_]u8{ 1, 2 }) == 3);
     try expect(sliceSum(&[_]u8{ 3, 4 }) == 7);
 }