Files
hakorune/docs/development/current/main/phases/phase-29aa/README.md

1.9 KiB
Raw Blame History

Phase 29aa: RC insertion safety expansionCFG-aware design

Status: P3 Complete (Jump→Return single-predecessor propagation)
Scope: Phase 29z の単一block限定実装から、誤releaseを起こさない形で CFG-aware に拡張するための設計を固める。

Entry:

  • SSOT: docs/development/current/main/phases/phase-29y/20-RC-INSERTION-SSOT.md
  • 指示書: docs/development/current/main/phases/phase-29aa/P0-RC_INSERTION_CFG_AWARE_DESIGN-INSTRUCTIONS.md

Non-goals:

  • 既定挙動変更feature rc-insertion-minimal 以外は no-op 維持)
  • SSA last-use を根拠にした drop
  • いきなり全ケース実装(設計+最小プロトタイプを優先)

Deliverables (P0):

  • RcPlan解析→挿入の二段階設計
  • PHI/loop/early-exit の危険パターン整理と Fail-Fast 方針
  • release 安全条件の契約
  • P1 で実装する最小ターゲットを 1 個に絞る

Progress:

  • P0: CFG-aware 設計の固定RcPlan/危険パターン/安全条件の契約)
  • P1: rc_insertion を RcPlan の Plan→Apply 2-stage へ分離(挙動不変)
  • P2: Jump/Branch 終端では cleanup を入れない契約を SSOT 化Fail-Fast guard
  • P3: Jump→Return単一 predecessorで state 伝播し ReturnCleanup を成立させるP2維持

P3 SSOT:

  • Contract:
    • cleanup は Return block の BeforeTerminator のみJump/Branch block には入れない)
    • Jump→Return かつ predecessor が 1 つの場合のみ state 伝播を許可
    • 条件不一致で伝播/cleanup を試みたら debug_assert! で Fail-Fast
  • Non-goals:
    • Branch/PHI/loop/early-exit の cleanup
    • multi-predecessor の合流PHI 問題回避)
    • Jump block への release 挿入P2維持
  • Acceptance:
    • quick 154/154 PASS 維持
    • cargo run --bin rc_insertion_selfcheck --features rc-insertion-minimal PASS
    • 既定OFF維持featureなしは no-op