- Add CopyTypePropagator box (ChatGPT Pro design) for fixed-point Copy instruction type propagation - Integrate into lifecycle.rs before return type inference - Case D reduced from 12 to 9 (25% reduction) Implementation: - src/mir/phi_core/copy_type_propagator.rs: New box with fixed-point loop - src/mir/phi_core/mod.rs: Add module export - src/mir/builder/lifecycle.rs: Call propagator before return inference Test results: - Baseline: 494 passed, 33 failed (was 489/34) - Case D: 9 remaining (from 12) - Unit tests: 4/4 passed Remaining 9 Case D breakdown: - GroupA: Loop Edge Copy (7 cases) - PHI incoming needs Copy trace - GroupB: Multi-level PHI (2 cases) - Recursive PHI resolution needed Phase 84-3 will address GroupA with Edge Copy tracing in GenericTypeResolver. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.5 KiB
4.5 KiB
Phase 84: Case D 分析サマリー(エグゼクティブサマリー)
TL;DR
現状: 9 件の Case D 失敗(Phase 83 + Phase 84-1 + Phase 84-2 実装後)
主要原因: PHI 経由の複雑な edge パターン(await/try-catch、多段 PHI チェーンなど)
対応状況:
- Phase 83: MethodReturnHintBox(P3-D)実装で 20 件 → 15 件
- Phase 84-1: Const 命令型アノテーション追加で 15 件 → 12 件
- Phase 84-2: CopyTypePropagator 導入で 12 件 → 9 件
残タスク: PHI 推論強化(Phase 84-3、PhiTypeResolver)と if_phi フォールバック縮退
問題の核心
❌ 現在の実装(バグ)
// Integer/Bool/Float/Null/Void は型を登録しない
pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
let dst = b.next_value_id();
b.emit_instruction(MirInstruction::Const {
dst,
value: ConstValue::Integer(val),
});
dst // ← value_types に何も登録していない!
}
✅ 修正版
pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
let dst = b.next_value_id();
b.emit_instruction(MirInstruction::Const {
dst,
value: ConstValue::Integer(val),
});
b.value_types.insert(dst, MirType::Integer); // ← この1行を追加
dst
}
同様の修正を emit_bool/emit_float/emit_null/emit_void にも適用
影響範囲
修正されるテスト(推定 14-16 件)
mir_locals_uninitialized-return 0の型mir_stageb_like_*_verifies(7件) - 全て return 系mir_stage1_cli_entry_like_pattern_verifies- return 系- 他の return リテラルを含むテスト
残存する問題(8-10 件)
- Copy命令型伝播不足 (6-8件) - Loop/If の edge copy
- PHI型推論限界 (2-4件) - Await/Try-Catch/複雑な制御フロー
実装計画
Phase 84-1: Const命令型アノテーション(完了)
Status: ✅ 実装完了(40dfbc68)
ファイル: src/mir/builder/emission/constant.rs
変更箇所: 5 関数 × 1 行 = 5 行追加
効果: Case D が 15 件 → 12 件(Const 欠如グループは解消)
所要時間: 1-2 時間(テスト含む)
リスク: 極めて低い(String は既に実装済み)
Phase 84-2: Copy命令型伝播(完了)
Status: ✅ 実装完了(CopyTypePropagator 導入)
ファイル:
src/mir/phi_core/copy_type_propagator.rs(新規箱)src/mir/phi_core/mod.rssrc/mir/builder/lifecycle.rs
内容:
CopyTypePropagatorが MIR 関数内のCopy { dst, src }を固定点ループで走査し、value_types[src]の型をvalue_types[dst]に伝播(Unknown のみ上書き)。finalize_module内で return 型推論の前に実行。
効果:
- ベースラインテスト: 489 passed, 34 failed → 494 passed, 33 failed(+5/-1)。
- Case D: 12 件 → 9 件(約 25% 削減)。
箱理論チェック:
- 単一責務(Copy の型伝播のみ)、副作用は
value_types更新に限定、PHI/JoinIR には非依存。
Phase 84-3: PHI型推論強化(長期)
期待効果: Case D が 2-4件 → 0件(完全解決)
所要時間: 要検討(複雑度による)
リスク: 高(再帰的解析のパフォーマンス)
推奨アクション
-
Phase 84-1 は完了済み
- Const 命令の型アノテーション欠如グループは解消済み。
-
Phase 84-2 も完了済み
- Copy チェーンだけで説明できる Case D は削減済みで、残りは PHI 主体の複雑ケースに集中。
-
Phase 84-3 は「PHI 強化」を必要最小限で検討
- Await/Try-Catch や多段 PHI チェーンなど、本当に必要なパターンだけを PhiTypeResolver で扱う。
期待される最終結果
| Phase | Case D 件数 | 修正率 | 備考 |
|---|---|---|---|
| Phase 82 終了時 | 20 件 | - | lifecycle 修正後 |
| Phase 83 後 | 15 件 | 25% | MethodReturnHintBox(P3-D) |
| Phase 84-1 後 | 12 件 | 40% | Const 型アノテーション |
| Phase 84-2 後 | 9 件 | 55% | CopyTypePropagator |
| Phase 84-3 後(目標) | 0-2 件 | 80-100% | PhiTypeResolver(必要最小限) |
最終目標: Case D を 0-2 件まで縮小し、infer_type_from_phi* を本線から外せる状態にする。
詳細分析
完全な分析レポートは以下を参照: