fix: method on array-index/deref receiver mutates the live place (issue 0145)

A *self method called directly on arr[i] (or a deref place) fell through to an
alloca+store-of-value, so the callee mutated a throwaway copy and the live slot
was never written. fixupMethodReceiver now takes the real address of
.index_expr/.deref_expr receivers via lowerExprAsPtr (normalized to *T),
mirroring the explicit-argument path. A comptime-pack index (xs[i] where xs is
a pack) is excluded -- a pack has no runtime storage to address -- so it keeps
flowing through the general copy path.

Regression: examples/0188-types-method-array-index-receiver.sx
This commit is contained in:
agra
2026-06-21 09:11:44 +03:00
parent 333f57026c
commit d4edf4b4b0
6 changed files with 133 additions and 7 deletions

View File

@@ -0,0 +1 @@
0

View File

@@ -0,0 +1,2 @@
direct = true
ptr = true