You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
regression(main): wolf-ecs-shaped nested subclass loops lost their versioned fast clones (packed-guard sites 3 → 0) #9106
On main f3f405271c (and 744df26d8e), the issue_8690_loop_versioned_arraylike case read_only_loops_have_preheader_proofs_and_fallback_free_fast_blocks fails its shape assertion: scan()'s IR contains 0js_packed_arraylike_loop_guard( sites where 3 are expected — the outer fast/slow copies no longer own preheader-versioned inner loops. issue_8773_closure_capture_packed_loops fails 1 case the same way. Program output stays correct; the flagship nested-subclass-loop shape silently runs at generic-loop speed.
Window
Both suites were green on macOS at 8b40634abd (the #9071 replay) and fail at f3f405271c. The window contains the packed/versioned-loop landings #9070 (versioned length-bound hoist), #9084 (read admissions), #9091 (unboxed accumulators), plus #9075/#9080/#9085. The shape gates were doing their job — this was caught only because an unrelated branch ran the full battery.
Repro
cargo test -p perry --test issue_8690_loop_versioned_arraylike
(macOS; needs the default-target libperry_runtime.a — on a fresh box cargo build -p perry-runtime-static first, and note the suite fails in ~0.5s with an archive-mismatch harness error otherwise, which is NOT this regression.)
Notes
The fixture is the wolf-ecs Query extends Array / Archetype extends Array nested scan — the exact shape the ECS campaign optimized to 2.3×/1.5× of node, so this likely walks back part of that standing until fixed. Independent of PR #9105 (verified by running both suites on detached main in the same worktree).
Bisect result — the window in this issue is wrong: the culprit is #9062 (da0eefbf99, for-head declarator hoisting), an ancestor of the claimed-good endpoint; 8b40634 already fails on a clean checkout here. #9070/#9084/#9091 are innocent. Mechanism + contained HIR fix in the PR just linked (first-declarator carve-out when the reorder is provably unobservable; all three affected suites plus #9052's own fixtures green).
Activity
proggeramlug commentedon Aug 30, 2026
Bisect result — the window in this issue is wrong: the culprit is #9062 (
da0eefbf99, for-head declarator hoisting), an ancestor of the claimed-good endpoint; 8b40634 already fails on a clean checkout here. #9070/#9084/#9091 are innocent. Mechanism + contained HIR fix in the PR just linked (first-declarator carve-out when the reorder is provably unobservable; all three affected suites plus #9052's own fixtures green).fix(hir): keep the literal counter of a classic for head in For::init (…