]> git.lizzy.rs Git - rust.git/blob - src/test/mir-opt/lower_intrinsics.rs
Auto merge of #83314 - Aaron1011:print-unstable-value, r=lcnr
[rust.git] / src / test / mir-opt / lower_intrinsics.rs
1 // compile-flags: -Cpanic=abort
2 #![feature(core_intrinsics)]
3 #![crate_type = "lib"]
4
5 // EMIT_MIR lower_intrinsics.wrapping.LowerIntrinsics.diff
6 pub fn wrapping<T: Copy>(a: T, b: T) {
7     let _x = core::intrinsics::wrapping_add(a, b);
8     let _y = core::intrinsics::wrapping_sub(a, b);
9     let _z = core::intrinsics::wrapping_mul(a, b);
10 }
11
12 // EMIT_MIR lower_intrinsics.size_of.LowerIntrinsics.diff
13 pub fn size_of<T>() -> usize {
14     core::intrinsics::size_of::<T>()
15 }
16
17 // EMIT_MIR lower_intrinsics.forget.LowerIntrinsics.diff
18 pub fn forget<T>(t: T) {
19     core::intrinsics::forget(t)
20 }
21
22 // EMIT_MIR lower_intrinsics.unreachable.LowerIntrinsics.diff
23 pub fn unreachable() -> ! {
24     unsafe { core::intrinsics::unreachable() };
25 }
26
27 // EMIT_MIR lower_intrinsics.f_unit.PreCodegen.before.mir
28 pub fn f_unit() {
29     f_dispatch(());
30 }
31
32
33 // EMIT_MIR lower_intrinsics.f_u64.PreCodegen.before.mir
34 pub fn f_u64() {
35     f_dispatch(0u64);
36 }
37
38 #[inline(always)]
39 pub fn f_dispatch<T>(t: T) {
40     if std::mem::size_of::<T>() == 0 {
41         f_zst(t);
42     } else {
43         f_non_zst(t);
44     }
45 }
46
47 #[inline(never)]
48 pub fn f_zst<T>(_t: T) {
49 }
50
51 #[inline(never)]
52 pub fn f_non_zst<T>(_t: T) {}
53
54 // EMIT_MIR lower_intrinsics.non_const.LowerIntrinsics.diff
55 pub fn non_const<T>() -> usize {
56     // Check that lowering works with non-const operand as a func.
57     let size_of_t = core::intrinsics::size_of::<T>;
58     size_of_t()
59 }
60
61 pub enum E {
62     A,
63     B,
64     C,
65 }
66
67 // EMIT_MIR lower_intrinsics.discriminant.LowerIntrinsics.diff
68 pub fn discriminant<T>(t: T) {
69     core::intrinsics::discriminant_value(&t);
70     core::intrinsics::discriminant_value(&0);
71     core::intrinsics::discriminant_value(&());
72     core::intrinsics::discriminant_value(&E::B);
73 }