// compile-flags: -O -Z merge-functions=disabled --edition=2021 // only-x86_64 #![crate_type = "lib"] #![feature(try_blocks)] // These are now NOPs in LLVM 15, presumably thanks to nikic's change mentioned in // . // Unfortunately, as of 2022-08-17 they're not yet nops for `u64`s nor `Option`. use std::ops::ControlFlow::{self, Continue, Break}; // CHECK-LABEL: @result_nop_match_32 #[no_mangle] pub fn result_nop_match_32(x: Result) -> Result { // CHECK: start // CHECK-NEXT: ret i64 %0 match x { Ok(x) => Ok(x), Err(x) => Err(x), } } // CHECK-LABEL: @result_nop_traits_32 #[no_mangle] pub fn result_nop_traits_32(x: Result) -> Result { // CHECK: start // CHECK-NEXT: ret i64 %0 try { x? } } // CHECK-LABEL: @control_flow_nop_match_32 #[no_mangle] pub fn control_flow_nop_match_32(x: ControlFlow) -> ControlFlow { // CHECK: start // CHECK-NEXT: ret i64 %0 match x { Continue(x) => Continue(x), Break(x) => Break(x), } } // CHECK-LABEL: @control_flow_nop_traits_32 #[no_mangle] pub fn control_flow_nop_traits_32(x: ControlFlow) -> ControlFlow { // CHECK: start // CHECK-NEXT: ret i64 %0 try { x? } }