diff --git a/src/Sema.zig b/src/Sema.zig index e534a86aee..76b5dcb8c0 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -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, diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index 3286b812bf..d2a75e18df 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -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); + } +}