summaryrefslogtreecommitdiff
path: root/tests/mir-opt/const_prop/transmute.rs
blob: 762c421715ab5ff48f525702cc95d603d790c836 (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// unit-test: ConstProp
// compile-flags: -O --crate-type=lib
// ignore-endian-big
// EMIT_MIR_FOR_EACH_BIT_WIDTH

use std::mem::transmute;

// EMIT_MIR transmute.less_as_i8.ConstProp.diff
pub fn less_as_i8() -> i8 {
    unsafe { transmute(std::cmp::Ordering::Less) }
}

// EMIT_MIR transmute.from_char.ConstProp.diff
pub fn from_char() -> i32 {
    unsafe { transmute('R') }
}

// EMIT_MIR transmute.valid_char.ConstProp.diff
pub fn valid_char() -> char {
    unsafe { transmute(0x52_u32) }
}

// EMIT_MIR transmute.invalid_char.ConstProp.diff
pub unsafe fn invalid_char() -> char {
    unsafe { transmute(i32::MAX) }
}

// EMIT_MIR transmute.invalid_bool.ConstProp.diff
pub unsafe fn invalid_bool() -> bool {
    unsafe { transmute(-1_i8) }
}

// EMIT_MIR transmute.undef_union_as_integer.ConstProp.diff
pub unsafe fn undef_union_as_integer() -> u32 {
    union Union32 { value: u32, unit: () }
    unsafe { transmute(Union32 { unit: () }) }
}

// EMIT_MIR transmute.unreachable_direct.ConstProp.diff
pub unsafe fn unreachable_direct() -> ! {
    let x: Never = unsafe { transmute(()) };
    match x {}
}

// EMIT_MIR transmute.unreachable_ref.ConstProp.diff
pub unsafe fn unreachable_ref() -> ! {
    let x: &Never = unsafe { transmute(1_usize) };
    match *x {}
}

// EMIT_MIR transmute.unreachable_mut.ConstProp.diff
pub unsafe fn unreachable_mut() -> ! {
    let x: &mut Never = unsafe { transmute(1_usize) };
    match *x {}
}

// EMIT_MIR transmute.unreachable_box.ConstProp.diff
pub unsafe fn unreachable_box() -> ! {
    let x: Box<Never> = unsafe { transmute(1_usize) };
    match *x {}
}

enum Never {}