| author | |
| committer | |
| log | 1f748fe42662da3ee2c977ba638a714e15acb433 |
| tree | eabf6b5bee8605a18c7704450d61f613c77a6f28 |
| parent | c619371ec1ae51d083703e187cae2d5b98c28741 |
2 files changed, 16 insertions(+), 1 deletions(-)
src/Sema.zig+5-1| ... | @@ -22660,7 +22660,11 @@ fn beginComptimePtrMutation( | ... | @@ -22660,7 +22660,11 @@ fn beginComptimePtrMutation( |
| 22660 | .ty = payload_ty, | 22660 | .ty = payload_ty, |
| 22661 | }, | 22661 | }, |
| 22662 | 22662 | ||
| 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 | }, | ||
| 22664 | } | 22668 | } |
| 22665 | }, | 22669 | }, |
| 22666 | .bad_decl_ty, .bad_ptr_ty => return parent, | 22670 | .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" { | ... | @@ -1282,3 +1282,14 @@ test "optional pointer represented as a pointer value" { |
| 1282 | try expect(payload_ptr.*.* == 15); | 1282 | try expect(payload_ptr.*.* == 15); |
| 1283 | } | 1283 | } |
| 1284 | } | 1284 | } |
| 1285 | |||
| 1286 | test "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 | } |