diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 1f5a932e..a6f89aef 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -1,6 +1,6 @@ # Self Current Task — Now (main) -## Current Focus: Phase 29aa P7(Deterministic ReleaseStrong ordering) +## Current Focus: Phase 29aa P8(Null propagation across CFG; Copy-only) **2025-12-28: Phase 29aa P5 完了** ✅ - 目的: Return block が複数 predecessor のとき、incoming state が完全一致する場合のみ ReturnCleanup を成立させる @@ -25,6 +25,10 @@ - Selfcheck: Case 3.11(values が昇順であることを検証)PASS - 検証: quick 154/154 PASS / selfcheck PASS +**2025-12-28: Phase 29aa P8 進行中** +- 目的: CFG を跨いだ null 伝播(Copy-only)で explicit drop(Store null)の精度を上げる +- 入口: `docs/development/current/main/phases/phase-29aa/README.md` + **2025-12-27: Phase 29aa P4 完了** ✅ - 目的: Jump の直列チェーン(単一 predecessor)を通して ReturnCleanup を成立させる(cleanup は Return block のみ) - 入口: `docs/development/current/main/phases/phase-29aa/README.md` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 77a6316e..0b0c6b83 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -68,13 +68,14 @@ Related: - 入口: `docs/development/current/main/phases/phase-29z/README.md` - 指示書: `docs/development/current/main/phases/phase-29z/P0-RC_INSERTION_MINIMAL-INSTRUCTIONS.md` -- **Phase 29aa(P6 COMPLETE / P7 planned): RC insertion safety expansion(CFG-aware)** +- **Phase 29aa(P7 COMPLETE / P8 planned): RC insertion safety expansion(CFG-aware)** - 進捗: P2 ✅ 完了(Jump/Branch 終端で cleanup を入れない契約の SSOT 化) - 進捗: P3 ✅ 完了(Jump→Return single-predecessor state 伝播) - 進捗: P4 ✅ 完了(Jump-chain propagation to Return) - 進捗: P5 ✅ 完了(Multi-predecessor Return join: state完全一致のみ) - 進捗: P6 ✅ 完了(Multi-predecessor Return join: intersection) - - 次: P7(Deterministic ReleaseStrong ordering) + - 進捗: P7 ✅ 完了(Deterministic ReleaseStrong ordering) + - 次: P8(Null propagation across basic blocks; Copy-only first) - 入口: `docs/development/current/main/phases/phase-29aa/README.md` - **Phase 29x(planned, post self-host): De-Rust runtime for LLVM execution** diff --git a/docs/development/current/main/phases/phase-29aa/README.md b/docs/development/current/main/phases/phase-29aa/README.md index 6e96f4ca..c1c2f40a 100644 --- a/docs/development/current/main/phases/phase-29aa/README.md +++ b/docs/development/current/main/phases/phase-29aa/README.md @@ -1,6 +1,6 @@ # Phase 29aa: RC insertion safety expansion(CFG-aware design) -Status: P7 Complete (Deterministic ReleaseStrong ordering) +Status: P8 Ready (Null propagation across CFG; Copy-only) Scope: Phase 29z の単一block限定実装から、誤releaseを起こさない形で CFG-aware に拡張するための設計を固める。 Entry: @@ -27,6 +27,7 @@ Progress: - P5: Multi-predecessor Return で incoming state が完全一致する場合のみ ReturnCleanup を成立させる(P2/P3/P4 維持) - P6: Multi-predecessor Return で incoming state の「安全な共通部分(intersection)」のみ cleanup する(P2-P5 維持) - P7: ReleaseStrong の values 順序を決定的にする(HashSet/HashMap 由来の非決定性を排除) +- P8: Null 伝播を CFG を跨いで扱う(最初は Copy-only + single-predecessor) P3 SSOT: - Contract: @@ -102,6 +103,16 @@ P7 SSOT: - Scope: - ReturnCleanup(単一block / P4 chain / P6 join)の `values` が対象 - Overwrite/ExplicitNull の単一要素 vec はそのままで OK + +P8 SSOT: +- Objective: + - `Store null`(explicit drop)の追跡を CFG 越しに正しく扱い、誤 release を避ける。 +- Contract: + - 最初は Copy-only の null 伝播のみ(`Copy dst, src`) + - single-predecessor(Jump-chain / single-pred Return)範囲に限定 + - multi-predecessor では null 伝播は合流しない(保守的に Unknown 扱い) +- Acceptance: + - selfcheck: null を A で作って B で Store に使う(Jump で跨ぐ)ケースを追加し PASS - Conservative: - intersection は「安全だが保守的」。value 不一致の ptr は release されない=リーク方向 - P5 でも同じく release できてなかったケースなので回帰にはならないが、完全なメモリ回収には将来の PHI 対応が必要