zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 86570b3e2c58da76d7e94531c1aa8017012b0521 (tree)
parent 6fc9f6c5f6a067475f97cd16cb265332c8b7c6f3
Author: Cody Tapscott <topolarity@tapscott.me>
Date:   Tue,  5 Jul 2022 00:58:47 -0700

stage2: Fix corrupted Type when de-referencing field pointer

Diffstat:
Msrc/Sema.zig | 4++--
Mtest/behavior.zig | 1+
Atest/behavior/bugs/12003.zig | 7+++++++
3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -21614,10 +21614,10 @@ fn beginComptimePtrLoad( deref.ty_without_well_defined_layout = field_ptr.container_ty; } - const tv = &(deref.pointee orelse { + const tv = deref.pointee orelse { deref.pointee = null; break :blk deref; - }); + }; const coerce_in_mem_ok = (try sema.coerceInMemoryAllowed(block, field_ptr.container_ty, tv.ty, false, target, src, src)) == .ok or (try sema.coerceInMemoryAllowed(block, tv.ty, field_ptr.container_ty, false, target, src, src)) == .ok; diff --git a/test/behavior.zig b/test/behavior.zig @@ -82,6 +82,7 @@ test { _ = @import("behavior/bugs/11179.zig"); _ = @import("behavior/bugs/11181.zig"); _ = @import("behavior/bugs/11213.zig"); + _ = @import("behavior/bugs/12003.zig"); _ = @import("behavior/byteswap.zig"); _ = @import("behavior/byval_arg_var.zig"); _ = @import("behavior/call.zig"); diff --git a/test/behavior/bugs/12003.zig b/test/behavior/bugs/12003.zig @@ -0,0 +1,7 @@ +test { + comptime { + const tuple_with_ptrs = .{ &0, &0 }; + const field_ptr = (&tuple_with_ptrs.@"0"); + _ = field_ptr.*; + } +}