|  | //@ compile-flags: -Cno-prepopulate-passes -Copt-level=0 | 
|  |  | 
|  | #![crate_type = "lib"] | 
|  |  | 
|  | #[no_mangle] | 
|  | pub fn demo_for_i32() { | 
|  | generic_impl::<i32>(); | 
|  | } | 
|  |  | 
|  | // Two important things here: | 
|  | // - We replace the "then" block with `unreachable` to avoid linking problems | 
|  | // - We neither declare nor define the `big_impl` that said block "calls". | 
|  |  | 
|  | // CHECK-LABEL: ; skip_mono_inside_if_false::generic_impl | 
|  | // CHECK: start: | 
|  | // CHECK-NEXT: br label %[[ELSE_BRANCH:bb[0-9]+]] | 
|  | // CHECK: [[ELSE_BRANCH]]: | 
|  | // CHECK-NEXT: call skip_mono_inside_if_false::small_impl | 
|  | // CHECK: bb{{[0-9]+}}: | 
|  | // CHECK-NEXT: ret void | 
|  | // CHECK: bb{{[0-9+]}}: | 
|  | // CHECK-NEXT: unreachable | 
|  |  | 
|  | fn generic_impl<T>() { | 
|  | trait MagicTrait { | 
|  | const IS_BIG: bool; | 
|  | } | 
|  | impl<T> MagicTrait for T { | 
|  | const IS_BIG: bool = std::mem::size_of::<T>() > 10; | 
|  | } | 
|  | if T::IS_BIG { | 
|  | big_impl::<T>(); | 
|  | } else { | 
|  | small_impl::<T>(); | 
|  | } | 
|  | } | 
|  |  | 
|  | #[inline(never)] | 
|  | fn small_impl<T>() {} | 
|  | #[inline(never)] | 
|  | fn big_impl<T>() {} |