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:
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.*;
+ }
+}