diff --git a/src/mir/builder/control_flow.rs b/src/mir/builder/control_flow.rs index d7d3811d..67b4995e 100644 --- a/src/mir/builder/control_flow.rs +++ b/src/mir/builder/control_flow.rs @@ -56,7 +56,18 @@ impl super::MirBuilder { eprintln!("[cf_loop] CALLED from somewhere"); eprintln!("[cf_loop] Current stack (simulated): check build_statement vs build_expression_impl"); } - // Delegate to LoopBuilder for consistent handling + + // Phase 186: LoopBuilder Hard Freeze - Require explicit legacy mode opt-in + if !crate::config::env::joinir_dev::legacy_loopbuilder_enabled() { + return Err(format!( + "[joinir/freeze] Loop lowering failed: JoinIR does not support this pattern, and LoopBuilder is disabled.\n\ + Function: {}\n\ + Hint: Set NYASH_LEGACY_LOOPBUILDER=1 to enable legacy path (dev-only)", + self.current_function.as_ref().map(|f| f.signature.name.as_str()).unwrap_or("") + )); + } + + // Delegate to LoopBuilder for consistent handling (legacy path only) let mut loop_builder = crate::mir::loop_builder::LoopBuilder::new(self); loop_builder.build_loop(condition, body) }