// skip-filecheck #![feature(control_flow_enum)] #![feature(try_trait_v2)] // compile-flags: -Zunsound-mir-opts use std::ops::ControlFlow; // EMIT_MIR separate_const_switch.too_complex.JumpThreading.diff fn too_complex(x: Result) -> Option { // The pass should break the outer match into // two blocks that only have one parent each. // Parents are one of the two branches of the first // match, so a later pass can propagate constants. match { match x { Ok(v) => ControlFlow::Continue(v), Err(r) => ControlFlow::Break(r), } } { ControlFlow::Continue(v) => Some(v), ControlFlow::Break(r) => None, } } // EMIT_MIR separate_const_switch.identity.JumpThreading.diff fn identity(x: Result) -> Result { Ok(x?) } fn main() { too_complex(Ok(0)); identity(Ok(0)); }