Skip to content

CI: gc_write_barrier_stress red on main (missing old→young remembered-set edges → segfault) #5029

Description

@proggeramlug

Summary

cargo-test is red on main: the GC write-barrier stress tests segfault deterministically.

test tenured_mutation_stress ... FAILED
test structured_clone_gc_churn_stress ... FAILED
  panicked at crates/perry/tests/gc_write_barrier_stress.rs:124:
  compiled binary failed (signal/segfault = missed write barrier)
  old-young-edge-verifier failed: checked_old_objects=3664 checked_remembered_pages=127
  checked_old_to_young_edges=37714 missing_edges=7710
  first_missing_parent=0x… first_missing_slot=0x… first_missing_child=0x…

Reproduced locally (release): cargo test --release -p perry --test gc_write_barrier_stress → 2 failed.

Diagnosis

The old→young edge verifier finds ~7710 remembered-set edges missing — i.e. some object-field stores that create an old→young pointer are not emitting/registering a write barrier, so a minor GC can miss roots and free live young objects → segfault. The stress harness covers structuredClone object fields and tenured-object mutation (cf. #4886 / #4956 GC barrier work). Likely a codegen write-barrier emission gap (or remembered-set registration gap) on a store shape the audit doesn't cover.

Scope

Pre-existing on main, independent of any in-flight feature PR. Surfaced while landing #5016 (PR #5022); its diff touches no GC code. Needs dedicated GC-context investigation. Distinct from #4985 (typed_shape_descriptors).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions