Skip to content

Commit 9e7a3e6

Browse files
Vexukristoff-it
authored andcommitted
Sema: resolve lazy values in resolveMaybeUndefValIntable
Closes #12512 Closes #12513
1 parent b8bcd48 commit 9e7a3e6

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/Sema.zig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,10 @@ fn resolveMaybeUndefValIntable(
16981698
.elem_ptr => check = check.castTag(.elem_ptr).?.data.array_ptr,
16991699
.eu_payload_ptr, .opt_payload_ptr => check = check.cast(Value.Payload.PayloadPtr).?.data.container_ptr,
17001700
.generic_poison => return error.GenericPoison,
1701-
else => return val,
1701+
else => {
1702+
try sema.resolveLazyValue(block, src, val);
1703+
return val;
1704+
},
17021705
};
17031706
}
17041707

test/behavior/eval.zig

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,3 +1325,25 @@ test "value in if block is comptime known" {
13251325
};
13261326
comptime try expect(std.mem.eql(u8, first, second));
13271327
}
1328+
1329+
test "lazy sizeof is resolved in division" {
1330+
const A = struct {
1331+
a: u32,
1332+
};
1333+
const a = 2;
1334+
try expect(@sizeOf(A) / a == 2);
1335+
try expect(@sizeOf(A) - a == 2);
1336+
}
1337+
1338+
test "lazy value is resolved as slice operand" {
1339+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1340+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1341+
1342+
const A = struct { a: u32 };
1343+
var a: [512]u64 = undefined;
1344+
1345+
const ptr1 = a[0..@sizeOf(A)];
1346+
const ptr2 = @ptrCast([*]u8, &a)[0..@sizeOf(A)];
1347+
try expect(@ptrToInt(ptr1) == @ptrToInt(ptr2));
1348+
try expect(ptr1.len == ptr2.len);
1349+
}

0 commit comments

Comments
 (0)