| //@ compile-flags: -Copt-level=0 | |
| //@ only-64bit | |
| #![crate_type = "lib"] | |
| use std::ops::ControlFlow; | |
| pub enum Never {} | |
| #[no_mangle] | |
| pub fn make_unmake_result_never(x: i32) -> i32 { | |
| // CHECK-LABEL: define{{( dso_local)?}} i32 @make_unmake_result_never(i32{{( signext)?}} %x) | |
| // CHECK: start: | |
| // CHECK-NEXT: br label %[[next:bb.*]] | |
| // CHECK: [[next]]: | |
| // CHECK-NEXT: ret i32 %x | |
| let y: Result<i32, Never> = Ok(x); | |
| let Ok(z) = y; | |
| z | |
| } | |
| #[no_mangle] | |
| pub fn extract_control_flow_never(x: ControlFlow<&str, Never>) -> &str { | |
| // CHECK-LABEL: define{{( dso_local)?}} { ptr, i64 } @extract_control_flow_never(ptr %x.0, i64 %x.1) | |
| // CHECK: start: | |
| // CHECK-NEXT: br label %[[next:bb.*]] | |
| // CHECK: [[next]]: | |
| // CHECK-NEXT: %[[P0:.+]] = insertvalue { ptr, i64 } poison, ptr %x.0, 0 | |
| // CHECK-NEXT: %[[P1:.+]] = insertvalue { ptr, i64 } %[[P0]], i64 %x.1, 1 | |
| // CHECK-NEXT: ret { ptr, i64 } %[[P1]] | |
| let ControlFlow::Break(s) = x; | |
| s | |
| } |