phase29am(p3): align core exit with frag exitmap

This commit is contained in:
2025-12-29 17:14:11 +09:00
parent 244471ac94
commit dafed7d8da

View File

@ -17,7 +17,7 @@
//! - V8: Frag entry matches header_bb
//! - V9: block_effects contains header_bb
//! - V10: body_bb effects go in loop_plan.body (block_effects[body_bb] must be empty)
//! - V11: Exit must be last in Seq/If branch
//! - V11: Exit must be last in Seq/If branch (ExitMap alignment)
//! - V12: Loop.body must be Effect-only (Seq-of-effects allowed)
//!
//! Phase 273 P3: V1 (Carrier completeness) removed with CoreCarrierInfo
@ -473,6 +473,28 @@ mod tests {
assert!(result.unwrap_err().contains("[V11]"));
}
#[test]
fn test_verify_if_exit_not_last_fails() {
let if_plan = CoreIfPlan {
condition: ValueId(1),
then_plans: vec![
CorePlan::Exit(CoreExitPlan::Return(None)),
CorePlan::Effect(CoreEffectPlan::Const {
dst: ValueId(2),
value: ConstValue::Integer(1),
}),
],
else_plans: Some(vec![CorePlan::Effect(CoreEffectPlan::Const {
dst: ValueId(3),
value: ConstValue::Integer(2),
})]),
};
let plan = CorePlan::If(if_plan);
let result = PlanVerifier::verify(&plan);
assert!(result.is_err());
assert!(result.unwrap_err().contains("[V11]"));
}
#[test]
fn test_v10_body_bb_effects_in_block_effects_fails() {
// V10: body_bb effects must be empty in block_effects