scripts/gc_root_dominance_check.py reports 7 violations across 4 distinct fingerprints on clean main (db821b5fd), against an allowlist whose entries list is empty. CLAUDE.md states every new hit is a red build, so this is either a real regression or the gate is currently red on main.
test_gap_array_iterator_manual_next…::main::js_closure_alloc->js_object_set_field_by_name
test_gap_gc_method_receiver_rooting…::perry_fn_…__make::js_closure_alloc->js_object_set_field_by_name
test_gap_object_create_method_this…::main::js_closure_alloc->js_object_set_field_by_name
test_gap_class_advanced…::main::js_object_alloc_class_inline_keys_stamped->js_private_brand_add
Shape of the first three (all identical):
alloc : %rN = call i64 @js_closure_alloc(...)
store : store i64 %rM, ptr %r19
bind : slot 9 call void @js_shadow_slot_bind(i32 9, ptr %r19)
between: js_object_set_field_by_name
MOVING : YES via js_object_set_field_by_name
i.e. the #7192 shape — the root store is emitted in-frame but after a call that can allocate.
Reproduce
cargo build --profile perry-dev -p perry -p perry-runtime-static -p perry-stdlib-static
PERRY_BIN=<target>/perry-dev/perry PERRY_RUNTIME_DIR=<target>/perry-dev \
./scripts/gc_root_dominance_corpus.sh /tmp/rdcorpus
python3 scripts/gc_root_dominance_check.py /tmp/rdcorpus; echo $? # -> 1
Caveat on the measurement
Measured with a perry-dev binary; gc-root-dominance.yml uses release, and it passes flags this invocation did not (--moving-only, --min-binds, --min-funcs, plus its env knobs). So the absolute count may not match CI's. Worth confirming at release profile before treating the count as authoritative — but the violations are real IR at the profile measured.
Found while auditing #8783; an identical A/B showed that PR introduces none of these.
scripts/gc_root_dominance_check.pyreports 7 violations across 4 distinct fingerprints on cleanmain(db821b5fd), against an allowlist whoseentrieslist is empty. CLAUDE.md states every new hit is a red build, so this is either a real regression or the gate is currently red onmain.Shape of the first three (all identical):
i.e. the #7192 shape — the root store is emitted in-frame but after a call that can allocate.
Reproduce
Caveat on the measurement
Measured with a
perry-devbinary;gc-root-dominance.ymluses release, and it passes flags this invocation did not (--moving-only,--min-binds,--min-funcs, plus its env knobs). So the absolute count may not match CI's. Worth confirming at release profile before treating the count as authoritative — but the violations are real IR at the profile measured.Found while auditing #8783; an identical A/B showed that PR introduces none of these.