Sema: fix mutation of optional ptr represented as regular ptr

This commit is contained in:
Veikka Tuominen 2022-07-22 19:48:58 +03:00
parent c619371ec1
commit 1f748fe426
2 changed files with 16 additions and 1 deletions

View File

@ -22660,7 +22660,11 @@ fn beginComptimePtrMutation(
.ty = payload_ty,
},
else => unreachable,
else => return ComptimePtrMutationKit{
.decl_ref_mut = parent.decl_ref_mut,
.pointee = .{ .direct = val_ptr },
.ty = payload_ty,
},
}
},
.bad_decl_ty, .bad_ptr_ty => return parent,

View File

@ -1282,3 +1282,14 @@ test "optional pointer represented as a pointer value" {
try expect(payload_ptr.*.* == 15);
}
}
test "mutate through pointer-like optional at comptime" {
comptime {
var val: u8 = 15;
var opt_ptr: ?*const u8 = &val;
const payload_ptr = &opt_ptr.?;
payload_ptr.* = &@as(u8, 16);
try expect(payload_ptr.*.* == 16);
}
}