File: enum-transparent-extract.rs

package info (click to toggle)
rustc 1.90.0%2Bdfsg1-1~bpo13%2B2
  • links: PTS, VCS
  • area: main
  • in suites: trixie-backports
  • size: 925,944 kB
  • sloc: xml: 158,148; javascript: 19,781; sh: 19,174; python: 15,732; ansic: 13,096; cpp: 7,181; asm: 4,376; makefile: 697; lisp: 176; sql: 15
file content (31 lines) | stat: -rw-r--r-- 812 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//@ 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 %x)
    // CHECK: start:
    // 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 align 1 %x.0, i64 %x.1)
    // CHECK: start:
    // 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
}