Sema: fix Value.intFitsInType for comptime int

This commit is contained in:
Andrew Kelley 2022-02-08 22:09:41 -07:00
parent 470c8ca48c
commit 59418d1bf6
2 changed files with 21 additions and 15 deletions

View File

@ -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,

View File

@ -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);
}