Commit 1f748fe426
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,
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);
+ }
+}