Commit 1f748fe426

Veikka Tuominen <git@vexu.eu>
2022-07-22 18:48:58
Sema: fix mutation of optional ptr represented as regular ptr
1 parent c619371
Changed files (2)
src
test
behavior
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);
+    }
+}