From f81d6e53a5ba8f80da3344c68345c33a489beada Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Wed, 19 Nov 2025 10:20:46 +0900 Subject: [PATCH] fix(mir/if): Phase 25.1c/k - Empty else-branch variable_map propagation fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Problem**: When if-statement has no explicit else-branch: - Else-branch entry creates single-pred PHIs (e.g., %9 → %22) - But else_var_map_end_opt was returned as None - merge_modified_vars fell back to pre_if values - Continuation block used old ValueIds → SSA violation **Root Cause**: if_form.rs L126 returned (void_val, None, None) instead of passing the PHI-renamed variable_map to merge_modified_vars. **Fix**: Return Some(self.variable_map.clone()) for empty else-branch to propagate PHI-renamed ValueIds to merge block. **Test**: ✅ mir_stage1_using_resolver_full_collect_entries_verifies now passes ✅ MIR verifier confirms no undefined value errors 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/mir/builder/if_form.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mir/builder/if_form.rs b/src/mir/builder/if_form.rs index 8e79f209..86f63495 100644 --- a/src/mir/builder/if_form.rs +++ b/src/mir/builder/if_form.rs @@ -123,7 +123,9 @@ impl MirBuilder { } } let void_val = crate::mir::builder::emission::constant::emit_void(self); - (void_val, None, None) + // Phase 25.1c/k: Pass PHI-renamed variable_map for empty else branch + // This ensures merge_modified_vars uses correct ValueIds after PHI renaming + (void_val, None, Some(self.variable_map.clone())) }; let else_exit_block = self.current_block()?; let else_reaches_merge = !self.is_current_block_terminated();