authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-22 19:48:58+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-22 19:50:11+03:00
log1f748fe42662da3ee2c977ba638a714e15acb433
treeeabf6b5bee8605a18c7704450d61f613c77a6f28
parentc619371ec1ae51d083703e187cae2d5b98c28741

Sema: fix mutation of optional ptr represented as regular ptr


2 files changed, 16 insertions(+), 1 deletions(-)

src/Sema.zig+5-1
......@@ -22660,7 +22660,11 @@ fn beginComptimePtrMutation(
2266022660 .ty = payload_ty,
2266122661 },
2266222662
22663 else => unreachable,
22663 else => return ComptimePtrMutationKit{
22664 .decl_ref_mut = parent.decl_ref_mut,
22665 .pointee = .{ .direct = val_ptr },
22666 .ty = payload_ty,
22667 },
2266422668 }
2266522669 },
2266622670 .bad_decl_ty, .bad_ptr_ty => return parent,
test/behavior/eval.zig+11
......@@ -1282,3 +1282,14 @@ test "optional pointer represented as a pointer value" {
12821282 try expect(payload_ptr.*.* == 15);
12831283 }
12841284}
1285
1286test "mutate through pointer-like optional at comptime" {
1287 comptime {
1288 var val: u8 = 15;
1289 var opt_ptr: ?*const u8 = &val;
1290
1291 const payload_ptr = &opt_ptr.?;
1292 payload_ptr.* = &@as(u8, 16);
1293 try expect(payload_ptr.*.* == 16);
1294 }
1295}