| author | |
| committer | |
| log | c1afe57d70606a20af42cb761b4919765295dcd4 |
| tree | 4d9ea6008d5d2c91efe49a1fd8474b789f57e55f |
| parent | b55a5007faad1de054e86e00bfdc9a58e5fc4ff8 |
Closes #12512
Closes #125132 files changed, 26 insertions(+), 1 deletions(-)
src/Sema.zig+4-1| ... | @@ -1698,7 +1698,10 @@ fn resolveMaybeUndefValIntable( | ... | @@ -1698,7 +1698,10 @@ fn resolveMaybeUndefValIntable( |
| 1698 | .elem_ptr => check = check.castTag(.elem_ptr).?.data.array_ptr, | 1698 | .elem_ptr => check = check.castTag(.elem_ptr).?.data.array_ptr, |
| 1699 | .eu_payload_ptr, .opt_payload_ptr => check = check.cast(Value.Payload.PayloadPtr).?.data.container_ptr, | 1699 | .eu_payload_ptr, .opt_payload_ptr => check = check.cast(Value.Payload.PayloadPtr).?.data.container_ptr, |
| 1700 | .generic_poison => return error.GenericPoison, | 1700 | .generic_poison => return error.GenericPoison, |
| 1701 | else => return val, | 1701 | else => { |
| 1702 | try sema.resolveLazyValue(block, src, val); | ||
| 1703 | return val; | ||
| 1704 | }, | ||
| 1702 | }; | 1705 | }; |
| 1703 | } | 1706 | } |
| 1704 | 1707 |
test/behavior/eval.zig+22| ... | @@ -1325,3 +1325,25 @@ test "value in if block is comptime known" { | ... | @@ -1325,3 +1325,25 @@ test "value in if block is comptime known" { |
| 1325 | }; | 1325 | }; |
| 1326 | comptime try expect(std.mem.eql(u8, first, second)); | 1326 | comptime try expect(std.mem.eql(u8, first, second)); |
| 1327 | } | 1327 | } |
| 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 | } |