mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-01 07:13:24 +03:00
11bcf3759e
Instead of defaulting to `None` it now defaults to `Align::ONE` i.e. no alignment restriction. Codegen test changes are due to us now skipping `align 1` annotations (they are useless; not skipping them makes all the raw pointers gain an `align 1` annotation which doesn't seem any good)
36 lines
953 B
Rust
36 lines
953 B
Rust
//@ 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 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 { 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
|
|
}
|