Skip to content

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

@proggeramlug

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions