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
repsel: PERRY_PTR_SHAPE_LOCALS=0 breaks test_gap_repsel_ptr_shape_locals (TypeError, exit 1) with no GC involved — the Phase 3b kill switch does not disable Phase 5a #6984
Pre-existing on main; surfaced while running scripts/gc_repsel_matrix.sh --arms all for #6950. No GC is involved — the failing cell reports cycles=0 moved=0.
Repro
$ PERRY_PTR_SHAPE_LOCALS=0 perry test-files/test_gap_repsel_ptr_shape_locals.ts -o psoff
$ ./psoff
...
TypeError: Cannot read properties of undefined (reading 'area')
at <anonymous>
$ echo $?
1
Diff against the Node oracle — the run dies just before the Phase 5a block:
Everything up to line 18 matches. With PERRY_PTR_SHAPE_LOCALS unset (the default) the whole file passes.
What it means
PERRY_PTR_SHAPE_LOCALS=0 is the documented A/B kill switch for repsel Phase 3b (Ptr<Shape> proven object locals, #6911). It is supposed to fall back to the boxed lowering and produce identical output — that is the entire point of the rep_ptr_shape_off matrix arm. Instead the fallback path produces undefined where an object is expected.
The four missing lines are the Phase 5a assertions (Ptr<Shape> proven this in methods) that #6925 appended to this file. So the most likely reading is that Phase 5a's lowering does not honour the Phase 3b kill switch: with the switch off, the this proof is still applied (or the fallback for it is missing) and the receiver comes out undefined.
rep_ptr_shape_off is not in the PR arm subset, so no per-PR run covers it.
The matrix run in #6977 is the first --arms all that started since 1a533a3a8, and this is the one cell that was red before any of that PR's changes took effect: baseline summary: PASS=29 UNVER=350 XFAIL=0 FAIL=1, and this is the 1.
Duplicate of the second half of #6976, found independently and concurrently by a different investigation — both bisect the same cell (repsel_ptr_shape_locals × rep_ptr_shape_off, TypeError, cycles=0 moved=0) to #6925 (1a533a3a8).
Keeping this one open as the canonical tracker for the defect (Phase 5a not honouring the Phase 3b PERRY_PTR_SHAPE_LOCALS=0 kill switch), since #6976 is really about the gate — that #6925's unregistered corpus file made gc_repsel_matrix.sh exit 3 before evaluating a single cell, so gc-stress reported a registration error instead of running, and continue-on-error: true swallowed it.
Two independent agents finding the same regression is itself the point worth recording: it was invisible for three merges because the gate that would have caught it could not fail the build.
Confirmed still open on main = d4ac65f21. Re-verified in the sweep #7262.
PERRY_PTR_SHAPE_LOCALS=0 perry test-files/test_gap_repsel_ptr_shape_locals.ts -o psoff
./psoff ; echo $?
rc=1, and the diff against node 26.5.1 is exactly the one in this issue — everything through line 18 matches, then the four Phase 5a lines are replaced by the throw:
No GC involved — this is a plain run with no GC env at all, confirming the issue's cycles=0 moved=0 framing. The Phase 3b kill switch still does not disable Phase 5a.
This is also #6976 item 2 and the standing entry in test-parity/gc_repsel_triage.txt (test_gap_repsel_ptr_shape_locals | rep_ptr_shape_off | #6976), whose text asks to "REMOVE THIS ENTRY when #6976 is fixed; an OFF arm is supposed to be the safest cell in the matrix." Still true.
Note this is one of the few rows in this sweep that needs no collector liveness to judge — it fails deterministically with zero collections, which makes it independent of #7255's inert-arm problem and therefore actionable right now, unlike #6982/#7018.
Activity
proggeramlug commentedon Jul 29, 2026
Duplicate of the second half of #6976, found independently and concurrently by a different investigation — both bisect the same cell (
repsel_ptr_shape_locals × rep_ptr_shape_off,TypeError,cycles=0 moved=0) to #6925 (1a533a3a8).Keeping this one open as the canonical tracker for the defect (Phase 5a not honouring the Phase 3b
PERRY_PTR_SHAPE_LOCALS=0kill switch), since #6976 is really about the gate — that #6925's unregistered corpus file madegc_repsel_matrix.shexit 3 before evaluating a single cell, sogc-stressreported a registration error instead of running, andcontinue-on-error: trueswallowed it.Two independent agents finding the same regression is itself the point worth recording: it was invisible for three merges because the gate that would have caught it could not fail the build.
proggeramlug commentedon Aug 2, 2026
Confirmed still open on
main=d4ac65f21. Re-verified in the sweep #7262.rc=1, and the diff against node 26.5.1 is exactly the one in this issue — everything through line 18 matches, then the four Phase 5a lines are replaced by the throw:No GC involved — this is a plain run with no GC env at all, confirming the issue's
cycles=0 moved=0framing. The Phase 3b kill switch still does not disable Phase 5a.This is also #6976 item 2 and the standing entry in
test-parity/gc_repsel_triage.txt(test_gap_repsel_ptr_shape_locals | rep_ptr_shape_off | #6976), whose text asks to "REMOVE THIS ENTRY when #6976 is fixed; an OFF arm is supposed to be the safest cell in the matrix." Still true.Note this is one of the few rows in this sweep that needs no collector liveness to judge — it fails deterministically with zero collections, which makes it independent of #7255's inert-arm problem and therefore actionable right now, unlike #6982/#7018.
fix(repsel): make scalar replacement's method-call summary independen…