authorgravatar for pentuppup@noreply.codeberg.orgpentuppup <pentuppup@noreply.codeberg.org> 2026-09-19 23:14:45-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-09-23 21:21:24+02:00
log50850875bf3783514b87c070358553a29635b318
tree2ff686d13dcbf7b5c515adc4061fc9ef1a36b6f7
parent0c8099a615ad99afb3250363029ce9bb3fc288a1

fix comptimeness of &arr_ptr.ptr


2 files changed, 14 insertions(+), 8 deletions(-)

src/Sema.zig+1-1
......@@ -26587,7 +26587,7 @@ fn fieldPtr(
2658726587 },
2658826588 .packed_offset = ptr_ptr_info.packed_offset,
2658926589 });
26590 return block.addTyOp(.ptr_cast, result_ty, object_ptr);
26590 return sema.coerceCompatiblePtrs(block, result_ty, object_ptr, object_ptr_src);
2659126591 } else {
2659226592 return sema.fail(
2659326593 block,
test/behavior/array.zig+13-7
......@@ -640,13 +640,19 @@ test "array of array agregate init" {
640640test "pointer to array has ptr field" {
641641 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
642642
643 const arr: *const [5]u32 = &.{ 10, 20, 30, 40, 50 };
644 try std.testing.expect(arr.ptr == @as([*]const u32, arr));
645 try std.testing.expect(arr.ptr[0] == 10);
646 try std.testing.expect(arr.ptr[1] == 20);
647 try std.testing.expect(arr.ptr[2] == 30);
648 try std.testing.expect(arr.ptr[3] == 40);
649 try std.testing.expect((&arr.ptr).*[4] == 50);
643 const S = struct {
644 fn doTheTest(p: *const [5]u32) !void {
645 try std.testing.expect(p.ptr == @as([*]const u32, p));
646 try std.testing.expect(p.ptr[0] == 10);
647 try std.testing.expect(p.ptr[1] == 20);
648 try std.testing.expect(p.ptr[2] == 30);
649 try std.testing.expect(p.ptr[3] == 40);
650 try std.testing.expect((&p.ptr).*[4] == 50);
651 }
652 };
653 const arr: [5]u32 = .{ 10, 20, 30, 40, 50 };
654 try comptime S.doTheTest(&arr);
655 try S.doTheTest(&arr);
650656}
651657
652658test "discarded array init preserves result location" {