fix(joinir): Phase 118 Pattern3 exit carrier PHI SSOT
This commit is contained in:
@ -14,7 +14,6 @@
|
||||
|
||||
mod block_allocator;
|
||||
mod carrier_init_builder;
|
||||
#[cfg(debug_assertions)]
|
||||
mod contract_checks;
|
||||
pub mod exit_line;
|
||||
mod exit_phi_builder;
|
||||
@ -738,6 +737,48 @@ pub(in crate::mir::builder) fn merge_joinir_mir_blocks(
|
||||
debug,
|
||||
)?;
|
||||
|
||||
// Phase 118 P2: Contract check (Fail-Fast) - exit_bindings LoopState carriers must have exit PHIs.
|
||||
if let Some(boundary) = boundary {
|
||||
contract_checks::verify_exit_bindings_have_exit_phis(boundary, &exit_carrier_phis)?;
|
||||
}
|
||||
|
||||
// Phase 118 P1: Dev-only carrier-phi SSOT logs (exit_bindings vs carrier_inputs vs exit_carrier_phis)
|
||||
if crate::config::env::joinir_dev_enabled() {
|
||||
if let Some(boundary) = boundary {
|
||||
let exit_binding_names: Vec<&str> = boundary
|
||||
.exit_bindings
|
||||
.iter()
|
||||
.map(|b| b.carrier_name.as_str())
|
||||
.collect();
|
||||
let carrier_input_names: Vec<&str> =
|
||||
merge_result.carrier_inputs.keys().map(|s| s.as_str()).collect();
|
||||
let exit_phi_names: Vec<&str> =
|
||||
exit_carrier_phis.keys().map(|s| s.as_str()).collect();
|
||||
|
||||
trace.stderr_if(
|
||||
&format!(
|
||||
"[joinir/phase118/dev] exit_bindings carriers={:?}",
|
||||
exit_binding_names
|
||||
),
|
||||
true,
|
||||
);
|
||||
trace.stderr_if(
|
||||
&format!(
|
||||
"[joinir/phase118/dev] carrier_inputs keys={:?}",
|
||||
carrier_input_names
|
||||
),
|
||||
true,
|
||||
);
|
||||
trace.stderr_if(
|
||||
&format!(
|
||||
"[joinir/phase118/dev] exit_carrier_phis keys={:?}",
|
||||
exit_phi_names
|
||||
),
|
||||
true,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Phase 246-EX: CRITICAL FIX - Use exit PHI dsts for variable_map reconnection
|
||||
//
|
||||
// **Why EXIT PHI, not HEADER PHI?**
|
||||
|
||||
Reference in New Issue
Block a user