## Summary
Eliminates remaining `value_gen.next()` calls from function-context code paths,
unifying all ValueId allocation through `MirBuilder::next_value_id()` SSOT allocator.
## Changes
### 1. Fixed `new_typed_value()` (src/mir/builder.rs:1068)
**Before**: `let id = self.value_gen.next();` (bypasses function context)
**After**: `let id = self.next_value_id();` (respects function context)
This is a public API used in function context, so must use SSOT allocator
to avoid collisions with reserved PHI dsts and function params.
### 2. Fixed test code (src/mir/builder.rs)
**test_shadowing_binding_restore** (lines 1161, 1171):
- Simulates function scope with `push_lexical_scope()`
- Changed to `builder.next_value_id()` for function scope simulation
**test_valueid_binding_parallel_allocation** (lines 1196-1216):
- Tests ValueId/BindingId independence
- Changed to `builder.next_value_id()` with note that Module context fallback preserves test intent
### 3. Verified Module context fallbacks (OK, no change needed)
These already check `current_function.is_some()` and use `value_gen.next()` only as Module context fallback:
- `src/mir/builder/utils.rs:43` - next_value_id() SSOT implementation
- `src/mir/builder/utils.rs:436` - pin_to_slot()
- `src/mir/builder/utils.rs:467` - materialize_local()
- `src/mir/utils/phi_helpers.rs:69` - insert_phi_unified()
## Verification
```bash
rg -n "value_gen\.next\(" src/mir --type rust | grep -v "Module context" | grep -v "//"
# Result: Only comments/docs remain
```
## Acceptance
✅ cargo test --release --lib - 997 passed
✅ phase135_trim_mir_verify.sh - PASS
✅ phase132_exit_phi_parity.sh - 3/3 PASS
✅ All function-context `value_gen.next()` eliminated
## Effect
- **Collision prevention**: No more ValueId collisions between function-level allocations and reserved PHI dsts
- **SSOT compliance**: All ValueId allocation flows through single allocator
- **Contract enforcement**: Phase 135 P1 contract_checks will catch violations immediately
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
48 lines
1.8 KiB
Markdown
48 lines
1.8 KiB
Markdown
# Phase ドキュメント
|
||
|
||
このフォルダは、実装フェーズ(Phase 131, Phase 33 等)ごとの詳細記録を保管します。
|
||
|
||
## 現在の Phase
|
||
|
||
- **Phase 132**: Exit Values Parity (VM == LLVM)
|
||
- **Phase 133**: Promoted carrier join_id(Trim)修正
|
||
- **Phase 134**: Plugin loader best-effort loading
|
||
- **Phase 135**: ConditionLoweringBox allocator SSOT(ValueId 衝突の根治)
|
||
- **Phase 136**: ValueId allocator SSOT 徹底(残存 value_gen.next() 掃討)
|
||
|
||
## Phase フォルダ構成(推奨)
|
||
|
||
```
|
||
phases/phase-131/
|
||
├── README.md (Phase 全体概要)
|
||
├── 131-03-llvm-lowering-inventory.md (LLVM 部分のテスト・検証)
|
||
├── 131-11-case-c-summary.md (Case C 実装サマリー)
|
||
└── phase131-11-case-c-root-cause-analysis.md (根本原因分析)
|
||
```
|
||
|
||
## 参照方法
|
||
|
||
1. **現在の Phase を知りたい** → [../10-Now.md](../10-Now.md)
|
||
2. **該当 Phase を詳しく知りたい** → フォルダを開く
|
||
3. **設計背景を知りたい** → [../design/](../design/README.md)
|
||
4. **調査ログを見たい** → [../investigations/](../investigations/README.md)
|
||
|
||
## Phase 命名規則
|
||
|
||
- **ファイル名**: `phase-<N>-<title>/` (例: `phase-131/`)
|
||
- **文書名**: `<N>-<NN>-<topic>.md` (例: `131-11-case-c-summary.md`)
|
||
- Phase 番号で自然にソート可能
|
||
- 同一 Phase 内で段階的に追跡可能
|
||
|
||
## 作成ルール(SSOT)
|
||
|
||
詳しくは [../DOCS_LAYOUT.md](../DOCS_LAYOUT.md) を参照。
|
||
|
||
- ✅ **置き場所**: `phases/phase-<N>/` 配下のみ
|
||
- ✅ **内容**: Phase の実装記録・進捗・チェックリスト・検証結果
|
||
- ❌ **避けるべき**: 複数 Phase で参照される設計・アーキテクチャ(→ design/ へ)
|
||
|
||
---
|
||
|
||
**最終更新**: 2025-12-15
|