From 50850875bf3783514b87c070358553a29635b318 Mon Sep 17 00:00:00 2001 From: pentuppup Date: Sat, 19 Sep 2026 23:14:45 -0400 Subject: [PATCH] fix comptimeness of &arr_ptr.ptr --- src/Sema.zig | 2 +- test/behavior/array.zig | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 3485075948e23534b447c15588bad8b32a9ca116..3bd2a31bc79d3877d1374171bed8225273bb4ff1 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -26587,7 +26587,7 @@ fn fieldPtr( }, .packed_offset = ptr_ptr_info.packed_offset, }); - return block.addTyOp(.ptr_cast, result_ty, object_ptr); + return sema.coerceCompatiblePtrs(block, result_ty, object_ptr, object_ptr_src); } else { return sema.fail( block, diff --git a/test/behavior/array.zig b/test/behavior/array.zig index dfafeeaf271ae03bf3e02553ffe9873d795cfb58..603e1784aaf0ddf1230d606bdb3b3f864dff11d3 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -640,13 +640,19 @@ test "array of array agregate init" { test "pointer to array has ptr field" { if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; - const arr: *const [5]u32 = &.{ 10, 20, 30, 40, 50 }; - try std.testing.expect(arr.ptr == @as([*]const u32, arr)); - try std.testing.expect(arr.ptr[0] == 10); - try std.testing.expect(arr.ptr[1] == 20); - try std.testing.expect(arr.ptr[2] == 30); - try std.testing.expect(arr.ptr[3] == 40); - try std.testing.expect((&arr.ptr).*[4] == 50); + const S = struct { + fn doTheTest(p: *const [5]u32) !void { + try std.testing.expect(p.ptr == @as([*]const u32, p)); + try std.testing.expect(p.ptr[0] == 10); + try std.testing.expect(p.ptr[1] == 20); + try std.testing.expect(p.ptr[2] == 30); + try std.testing.expect(p.ptr[3] == 40); + try std.testing.expect((&p.ptr).*[4] == 50); + } + }; + const arr: [5]u32 = .{ 10, 20, 30, 40, 50 }; + try comptime S.doTheTest(&arr); + try S.doTheTest(&arr); } test "discarded array init preserves result location" { -- 2.54.0