The explicit statepoint bridge emits no statepoint on invoke, so every call inside a try is unrooted under PERRY_STATEPOINTS=1.
Evidence
In the emitted IR: 58 invokes, 0 carrying gc.statepoint. Invoked callees include allocating runtime helpers — js_object_alloc_class_inline_keys, js_array_push_f64, js_native_call_method_by_id.
Isolation, same program and runtime, PERRY_STACKMAP_WALKER=unwind:
| backend |
result |
| explicit bridge |
0/3 clean |
| RS4GC |
3/3 |
| shadow stack |
3/3 |
So this is bridge-specific; RS4GC covers invoke correctly.
The reporting is silent about it
--statepoint-report counts "310 textual calls" and never sees these. "0 parser fallbacks" therefore says nothing about any call inside a try — the report's clean bill of health has a hole exactly where exceptions are.
This matters because #7302 moved exception lowering to invoke/landingpad precisely so that try-carrying functions could take statepoints like any other, and #7314 added 09_try_catch_roots.ts because nothing in the suite contained a try at all (0 of 8 probes). The probe passes; the bridge still does not root invoked calls.
Reproducer: wt-spsoak/gc-soak/try_root_probe.ts. Found during the statepoint adoption soak.
The explicit statepoint bridge emits no statepoint on
invoke, so every call inside atryis unrooted underPERRY_STATEPOINTS=1.Evidence
In the emitted IR: 58
invokes, 0 carryinggc.statepoint. Invoked callees include allocating runtime helpers —js_object_alloc_class_inline_keys,js_array_push_f64,js_native_call_method_by_id.Isolation, same program and runtime,
PERRY_STACKMAP_WALKER=unwind:So this is bridge-specific; RS4GC covers
invokecorrectly.The reporting is silent about it
--statepoint-reportcounts "310 textual calls" and never sees these. "0 parser fallbacks" therefore says nothing about any call inside atry— the report's clean bill of health has a hole exactly where exceptions are.This matters because #7302 moved exception lowering to
invoke/landingpadprecisely so that try-carrying functions could take statepoints like any other, and #7314 added09_try_catch_roots.tsbecause nothing in the suite contained atryat all (0 of 8 probes). The probe passes; the bridge still does not root invoked calls.Reproducer:
wt-spsoak/gc-soak/try_root_probe.ts. Found during the statepoint adoption soak.