fix(0110): for-over-array by-value fetch reads one element, not a full copy
lowerFor's by-value element fetch emitted index_get on the array VALUE; the emitter realizes that as a whole-array spill to a stack temp + GEP, per iteration — O(N^2) bytes copied per loop (and pre-0109 it also grew the stack per iteration, segfaulting a [4096]s64 loop). When the iterable is an array with addressable storage (and not deref'd from a pointer, whose identifier alloca holds the pointer rather than the array), the fetch is now index_gep on the storage + one element load. Storage-less arrays keep the index_get fallback. The loaded element remains a copy — mutating the capture does not write back. Regression: examples/0048-basic-for-array-large.sx (sum over 4096 elements + by-value copy-guard).
This commit is contained in:
2
examples/expected/0048-basic-for-array-large.stdout
Normal file
2
examples/expected/0048-basic-for-array-large.stdout
Normal file
@@ -0,0 +1,2 @@
|
||||
sum=8386560
|
||||
copy-guard: 10 20 30
|
||||
Reference in New Issue
Block a user