Skip to content

Match-binding shadow pushes are never popped — deep recursion traps bare unreachable #1322

Description

@aallan

Match-binding shadow-stack pushes are never popped: a recursive function whose body binds a match scrutinee traps with a bare unreachable (no diagnostic, no location) once recursion depth exhausts the shadow stack — measured at ~2,048 levels for an ADT scrutinee at the current base, and ~1,365 for the pair scrutinees the #1305 fix newly makes compilable. A no-match control at the same depth returns correctly.

Pre-existing (the ADT-scrutinee case reproduces before the #1305/#1309 branch); that branch extends the reach to String/Array recursion, which previously could not compile at all.

Fix direction

Pop match-binding shadow pushes at arm exit (the _destructure_let discipline covers lets; match arms need the balancing pop), or account for them in the frame's shadow budget; a depth-recursion conformance probe with the no-match control as the differential.

Found by the adversarial review of the group L branch. The KNOWN_ISSUES row rides that PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions