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:
@ -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();
|
||||
|
||||
Reference in New Issue
Block a user