nyash-codex
79b9d2b32c
fix(mir): edge-copy insertion before terminator - resolve ValueId undefined errors
【問題】
Stage-B(JSON v0 Bridge)で「use of undefined value ValueId(...)」エラー発生
- 原因: merge.rs:38-42でedge-copyを終端命令**後**に追加していた
- 結果: Copy命令が到達不能となり、ValueIdが未定義のまま参照される
【根本原因分析】
1. if_else.rs:34で`set_terminator(Jump)`を設定
2. if_else.rs:62で`merge_var_maps()`呼び出し
3. merge.rs:39で`add_instruction(Copy)` ← **ここで終端後に追加!**
4. BasicBlock構造上、terminator設定後のadd_instruction()は到達不能
【修正内容】
1. BasicBlock::add_instruction_before_terminator()メソッド追加
- 終端命令の有無に関わらず、instructions vecに追加
- terminator自体の追加は許可しない(panic)
2. merge_values()でedge-copy挿入方法を変更
- add_instruction() → add_instruction_before_terminator()
- これによりCopyが終端の**前**に配置される
【修正箇所】
- src/mir/basic_block.rs: add_instruction_before_terminator()追加(12行)
- src/runner/json_v0_bridge/lowering/merge.rs: 呼び出し変更(2行)
【テスト結果】
✅ if文PHIテスト: /tmp/phi_simple_if2.nyash → 出力 1
✅ loop文PHIテスト: /tmp/phi_loop_test.nyash → 出力 10
✅ userbox_*スモークテスト: 全6テストPASS
⚠️ Stage-B: namespace conflict未解決のため未確認
(apps/selfhost.vm.* と lang/hakorune.vm.* の競合)
【影響範囲】
- JSON v0 Bridge経路のif/else合流処理
- edge-copy(PHI-off mode)の正しい配置保証
- Builder経路は元々正常動作(影響なし)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-01 14:37:54 +09:00
..
2025-11-01 14:37:54 +09:00
2025-11-01 13:28:56 +09:00
2025-09-18 13:35:38 +09:00
2025-09-24 03:28:24 +09:00
2025-09-28 12:19:49 +09:00
2025-09-24 09:30:42 +09:00
2025-09-24 21:45:27 +09:00
2025-09-22 07:54:25 +09:00
2025-11-01 07:02:04 +09:00
2025-09-28 12:19:49 +09:00
2025-11-01 07:02:04 +09:00
2025-11-01 07:02:04 +09:00
2025-11-01 13:28:56 +09:00
2025-09-26 00:27:02 +09:00
2025-09-28 02:05:41 +09:00
2025-09-17 07:43:07 +09:00
2025-09-18 13:35:38 +09:00