fix(mir/if): Phase 25.1c/k - Empty else-branch variable_map propagation fix

**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 <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-19 10:20:46 +09:00
parent 1747ec976c
commit f81d6e53a5

View File

@ -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();