phase29aa(p6): intersect multi-pred return join state

This commit is contained in:
2025-12-28 05:20:45 +09:00
parent c8c99174af
commit 120167bb6e
4 changed files with 154 additions and 21 deletions

View File

@ -9,9 +9,13 @@
- Selfcheck: Case 3.7state一致→cleanup/ Case 3.8state不一致→no cleanupPASS
- 検証: quick 154/154 PASS / selfcheck PASS
**2025-12-28: Phase 29aa P6 進行中**
**2025-12-28: Phase 29aa P6 完了**
- 目的: multi-predecessor Return で state 不一致でも、共通部分intersectionだけ ReturnCleanup を成立
- 入口: `docs/development/current/main/phases/phase-29aa/README.md`
- Safety Contract: intersection全経路で ptr=val が一致するもののみ)で cleanup
- Conservative: value 不一致の ptr は release しない=リーク方向(安全だが保守的)
- Selfcheck: Case 3.9部分一致→cleanup/ Case 3.10intersection空→no cleanupPASS
- 検証: quick 154/154 PASS / selfcheck PASS
**2025-12-27: Phase 29aa P4 完了**
- 目的: Jump の直列チェーン(単一 predecessorを通して ReturnCleanup を成立させるcleanup は Return block のみ)

View File

@ -1,6 +1,6 @@
# Phase 29aa: RC insertion safety expansionCFG-aware design
Status: P6 Ready (Multi-predecessor Return join - intersection)
Status: P6 Complete (Multi-predecessor Return join - intersection)
Scope: Phase 29z の単一block限定実装から、誤releaseを起こさない形で CFG-aware に拡張するための設計を固める。
Entry:
@ -85,8 +85,17 @@ P6 SSOT:
- cleanup は Return block の BeforeTerminator のみJump/Branch block には入れない)
- join state は `intersection`(全 predecessor の end_state に同じ ptr が存在し、かつ value が同一のものだけ)
- intersection が empty の場合は cleanup しない
- subset/partial merge は許可するが、PHI 的な 値の合成 はしない(同一値のみ)
- subset/partial merge は許可するが、PHI 的な "値の合成" はしない(同一値のみ)
- Non-goals:
- PHI/loop/early-exit の cleanup
- value が一致しない ptr を release 対象に含めること
- Jump block への release 挿入P2維持
- Conservative:
- intersection は「安全だが保守的」。value 不一致の ptr は release されない=リーク方向
- P5 でも同じく release できてなかったケースなので回帰にはならないが、完全なメモリ回収には将来の PHI 対応が必要
- Acceptance:
- quick 154/154 PASS 維持
- `cargo run --bin rc_insertion_selfcheck --features rc-insertion-minimal` PASS
- selfcheck Case 3.9(部分一致 → Return block に 1 cleanup、intersection = v1PASS
- selfcheck Case 3.10intersection 空 → 全ブロック 0 cleanupPASS
- 既定OFF維持featureなしは no-op