perry-ext-net's gc_mutable_scanner_rewrites_listener_roots fails on clean main (reproduced at ad25921e7).
test tests::gc_mutable_scanner_rewrites_listener_roots ... FAILED
panicked at crates/perry-ext-net/src/tests.rs:59:5
test result: FAILED. 27 passed; 1 failed
Line 59 is:
fn assert_rewritten(before: i64, after: i64) {
assert_ne!(after, before);
assert!(perry_runtime::arena::pointer_in_nursery(after as usize));
}
So the test requires a GC root to have moved across a collection, and it is the assert_ne! that fires — the object did not move. That is the "fixture allocated but nothing was evacuated" shape: the test cannot distinguish "the mutable scanner failed to rewrite the root" from "no evacuating collection ran at all", and right now it is failing for one of those two reasons.
Two possibilities worth separating:
- the scanner genuinely stopped rewriting listener roots — a real GC bug;
- the fixture no longer drives an evacuating minor in this environment, so
after == before because nothing moved.
The second is the more likely reading given the test is asserting movement rather than correctness of a value, and it is the same class as other fixtures here that allocate without churning. Either way the test should assert its subject ran (e.g. that a copying minor actually occurred / copied_objects > 0) before asserting the address changed — otherwise a green run does not mean the scanner works, and a red one does not mean it is broken.
Reproduce:
RUST_TEST_THREADS=1 cargo test --profile perry-dev -p perry-ext-net --lib
Found while auditing #8632; confirmed not caused by it (identical failure on clean main).
perry-ext-net'sgc_mutable_scanner_rewrites_listener_rootsfails on cleanmain(reproduced atad25921e7).Line 59 is:
So the test requires a GC root to have moved across a collection, and it is the
assert_ne!that fires — the object did not move. That is the "fixture allocated but nothing was evacuated" shape: the test cannot distinguish "the mutable scanner failed to rewrite the root" from "no evacuating collection ran at all", and right now it is failing for one of those two reasons.Two possibilities worth separating:
after == beforebecause nothing moved.The second is the more likely reading given the test is asserting movement rather than correctness of a value, and it is the same class as other fixtures here that allocate without churning. Either way the test should assert its subject ran (e.g. that a copying minor actually occurred /
copied_objects > 0) before asserting the address changed — otherwise a green run does not mean the scanner works, and a red one does not mean it is broken.Reproduce:
RUST_TEST_THREADS=1 cargo test --profile perry-dev -p perry-ext-net --libFound while auditing #8632; confirmed not caused by it (identical failure on clean
main).