fix(mir): PHI検証panic修正 - update_cfg()を検証前に呼び出し

A案実装: debug_verify_phi_inputs呼び出し前にCFG predecessorを更新

修正箇所(7箇所):
- src/mir/builder/phi.rs:50, 73, 132, 143
- src/mir/builder/ops.rs:273, 328, 351

根本原因:
- Branch/Jump命令でsuccessorは即座に更新
- predecessorはupdate_cfg()で遅延再構築
- PHI検証が先に実行されてpredecessor未更新でpanic

解決策:
- 各debug_verify_phi_inputs呼び出し前に
  if let Some(func) = self.current_function.as_mut() {
      func.update_cfg();
  }
  を挿入してCFGを同期

影響: if/else文、論理演算子(&&/||)のPHI生成が正常動作
This commit is contained in:
nyash-codex
2025-11-01 13:28:56 +09:00
parent 149ec61d4d
commit 6a452b2dca
174 changed files with 2432 additions and 1014 deletions

View File

@ -34,11 +34,20 @@ path = "apps/lib/json_native/utils/string.nyash"
# Resolve `using json as ...` to json_native when desired
json = "json_native"
StringUtils = "string_utils"
StringHelpers = "sh_core"
JsonNode = "json_node"
[using.json_node]
path = "apps/lib/json_native/core/node.nyash"
# JSON stringify (Stage-B compiler dependency)
[using.stringify]
path = "lang/src/shared/json/stringify.hako"
# String helpers (Parser dependency)
[using.sh_core]
path = "lang/src/shared/common/string_helpers.hako"
[modules]
# Map logical namespaces to Nyash source paths (consumed by runner)
selfhost.compiler.debug = "apps/selfhost/compiler/boxes/debug_box.nyash"
@ -61,6 +70,7 @@ selfhost.vm.mir_min = "apps/selfhost/vm/boxes/mir_vm_min.nyash"
"lang.compiler.parser.scan.parser_ident_scan_box" = "lang/src/compiler/parser/scan/parser_ident_scan_box.hako"
"lang.compiler.parser.scan.parser_number_scan_box" = "lang/src/compiler/parser/scan/parser_number_scan_box.hako"
"lang.compiler.parser.scan.parser_string_scan_box" = "lang/src/compiler/parser/scan/parser_string_scan_box.hako"
"lang.compiler.parser.scan.parser_common_utils_box" = "lang/src/compiler/parser/scan/parser_common_utils_box.hako"
"lang.compiler.parser.using.using_collector_box" = "lang/src/compiler/parser/using/using_collector_box.hako"
"lang.compiler.parser.expr.parser_expr_box" = "lang/src/compiler/parser/expr/parser_expr_box.hako"
"lang.compiler.parser.expr.parser_peek_box" = "lang/src/compiler/parser/expr/parser_peek_box.hako"
@ -78,6 +88,16 @@ selfhost.vm.mir_min = "apps/selfhost/vm/boxes/mir_vm_min.nyash"
"lang.compiler.builder.ssa.cond_inserter" = "lang/src/compiler/builder/ssa/cond_inserter.hako"
"lang.compiler.builder.rewrite.special" = "lang/src/compiler/builder/rewrite/special.hako"
"lang.compiler.builder.rewrite.known" = "lang/src/compiler/builder/rewrite/known.hako"
"lang.compiler.emit.common.json_emit_box" = "lang/src/compiler/emit/common/json_emit_box.hako"
"lang.compiler.emit.common.mir_emit_box" = "lang/src/compiler/emit/common/mir_emit_box.hako"
"lang.compiler.emit.common.call_emit_box" = "lang/src/compiler/emit/common/call_emit_box.hako"
"lang.compiler.emit.common.newbox_emit_box" = "lang/src/compiler/emit/common/newbox_emit_box.hako"
"lang.compiler.emit.common.header_emit_box" = "lang/src/compiler/emit/common/header_emit_box.hako"
"lang.compiler.emit.common.json_emit" = "lang/src/compiler/emit/common/json_emit_box.hako"
"lang.compiler.emit.common.mir_emit" = "lang/src/compiler/emit/common/mir_emit_box.hako"
"lang.compiler.emit.common.call_emit" = "lang/src/compiler/emit/common/call_emit_box.hako"
"lang.compiler.emit.common.newbox_emit" = "lang/src/compiler/emit/common/newbox_emit_box.hako"
"lang.compiler.emit.common.header_emit" = "lang/src/compiler/emit/common/header_emit_box.hako"
# Shared helpers (selfhost shared/vm)
"selfhost.shared.json_adapter" = "lang/src/shared/json_adapter.hako"