Skip to content

Restore canonical WIR equivalence for residual compiler lowering cases #89

Description

@e54-bot

Goal

Resolve the native-WIR divergences exposed when the #38 compatibility runner compares compiler-produced WIR directly with the pinned Workshop oracle.

Scope

Cover these current regression cases:

  • synthetic/control-flow;
  • synthetic/issue-33-switch-break;
  • synthetic/issue-46-primitives;
  • synthetic/issue-47-control-flow;
  • synthetic/issue-47-switch-order;
  • synthetic/issue-47-switch-structured-target.

Preserve the existing source fixtures and their pinned oracle provenance. Fix OPY lowering where the canonical WIR contract already exists; coordinate with workshop-rs only when independent native Workshop evidence proves that the target contract itself is missing.

For synthetic/control-flow, OverPy debug(...) is a source-language helper whose observable behavior is implemented by lowering to native Workshop actions/values. It is therefore OPY-owned lowering, not a reason to introduce or depend on an OPY-specific canonical Workshop Debug carrier. The fixture must compare the lowered native Workshop semantics, not the source helper identity.

Non-goals

  • No exact Workshop text identity requirement.
  • No fabricated semantic evidence or runner exceptions.
  • No broad control-flow redesign beyond the listed divergences.
  • No OPY-specific helper semantics in canonical Workshop WIR.

Acceptance criteria

  • Every listed fixture reaches direct workshop-rs::roundtrip::equivalent native-WIR equality unless independent native Workshop evidence demonstrates a genuinely missing canonical Workshop contract and a correctly scoped owner follow-up exists.
  • synthetic/control-flow lowers OverPy debug(...) to the native Workshop semantics required by the pinned oracle; it is not accepted as a Workshop-owned Debug carrier gap.
  • The public compiler report and corpus runner remain executable against the same source input hash.
  • Existing supported lowering and diagnostic tests continue to pass.

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