2025-12-02 18:37:36 +09:00
|
|
|
|
# Phase 84: Case D 分析サマリー(エグゼクティブサマリー)
|
|
|
|
|
|
|
|
|
|
|
|
## TL;DR
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**現状**: 9 件の Case D 失敗(Phase 83 + Phase 84-1 + Phase 84-2 実装後)
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**主要原因**: PHI 経由の複雑な edge パターン(await/try-catch、多段 PHI チェーンなど)
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**対応状況**:
|
|
|
|
|
|
- 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 フォールバック縮退
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 問題の核心
|
|
|
|
|
|
|
|
|
|
|
|
### ❌ 現在の実装(バグ)
|
|
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
|
// 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 に何も登録していない!
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### ✅ 修正版
|
|
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
|
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/複雑な制御フロー
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 実装計画
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
### Phase 84-1: Const命令型アノテーション(完了)
|
|
|
|
|
|
|
|
|
|
|
|
**Status**: ✅ 実装完了(40dfbc68)
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
**ファイル**: `src/mir/builder/emission/constant.rs`
|
|
|
|
|
|
|
|
|
|
|
|
**変更箇所**: 5 関数 × 1 行 = **5 行追加**
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**効果**: Case D が 15 件 → 12 件(Const 欠如グループは解消)
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
**所要時間**: 1-2 時間(テスト含む)
|
|
|
|
|
|
|
|
|
|
|
|
**リスク**: 極めて低い(String は既に実装済み)
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
### Phase 84-2: Copy命令型伝播(完了)
|
|
|
|
|
|
|
|
|
|
|
|
**Status**: ✅ 実装完了(CopyTypePropagator 導入)
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
**ファイル**:
|
2025-12-02 19:37:01 +09:00
|
|
|
|
- `src/mir/phi_core/copy_type_propagator.rs`(新規箱)
|
|
|
|
|
|
- `src/mir/phi_core/mod.rs`
|
|
|
|
|
|
- `src/mir/builder/lifecycle.rs`
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**内容**:
|
|
|
|
|
|
- `CopyTypePropagator` が MIR 関数内の `Copy { dst, src }` を固定点ループで走査し、
|
|
|
|
|
|
`value_types[src]` の型を `value_types[dst]` に伝播(Unknown のみ上書き)。
|
|
|
|
|
|
- `finalize_module` 内で return 型推論の前に実行。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**効果**:
|
|
|
|
|
|
- ベースラインテスト: 489 passed, 34 failed → 494 passed, 33 failed(+5/-1)。
|
|
|
|
|
|
- Case D: 12 件 → 9 件(約 25% 削減)。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**箱理論チェック**:
|
|
|
|
|
|
- 単一責務(Copy の型伝播のみ)、副作用は `value_types` 更新に限定、PHI/JoinIR には非依存。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
### Phase 84-3: PHI型推論強化(長期)
|
|
|
|
|
|
|
|
|
|
|
|
**期待効果**: Case D が 2-4件 → 0件(完全解決)
|
|
|
|
|
|
|
|
|
|
|
|
**所要時間**: 要検討(複雑度による)
|
|
|
|
|
|
|
|
|
|
|
|
**リスク**: 高(再帰的解析のパフォーマンス)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 推奨アクション
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
1. **Phase 84-1 は完了済み**
|
|
|
|
|
|
- Const 命令の型アノテーション欠如グループは解消済み。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
2. **Phase 84-2 も完了済み**
|
|
|
|
|
|
- Copy チェーンだけで説明できる Case D は削減済みで、残りは PHI 主体の複雑ケースに集中。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
3. **Phase 84-3 は「PHI 強化」を必要最小限で検討**
|
|
|
|
|
|
- Await/Try-Catch や多段 PHI チェーンなど、本当に必要なパターンだけを PhiTypeResolver で扱う。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 期待される最終結果
|
|
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
| 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(必要最小限) |
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
2025-12-02 19:37:01 +09:00
|
|
|
|
**最終目標**: Case D を 0-2 件まで縮小し、`infer_type_from_phi*` を本線から外せる状態にする。
|
2025-12-02 18:37:36 +09:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 詳細分析
|
|
|
|
|
|
|
|
|
|
|
|
完全な分析レポートは以下を参照:
|
|
|
|
|
|
- [phase84-case-d-detailed-analysis.md](./phase84-case-d-detailed-analysis.md)
|