1 // compile-flags: -Cpanic=abort
2 #![feature(core_intrinsics)]
5 // EMIT_MIR lower_intrinsics.wrapping.LowerIntrinsics.diff
6 pub fn wrapping(a: i32, b: i32) {
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);
12 // EMIT_MIR lower_intrinsics.size_of.LowerIntrinsics.diff
13 pub fn size_of<T>() -> usize {
14 core::intrinsics::size_of::<T>()
17 // EMIT_MIR lower_intrinsics.align_of.LowerIntrinsics.diff
18 pub fn align_of<T>() -> usize {
19 core::intrinsics::min_align_of::<T>()
22 // EMIT_MIR lower_intrinsics.forget.LowerIntrinsics.diff
23 pub fn forget<T>(t: T) {
24 core::intrinsics::forget(t)
27 // EMIT_MIR lower_intrinsics.unreachable.LowerIntrinsics.diff
28 pub fn unreachable() -> ! {
29 unsafe { core::intrinsics::unreachable() };
32 // EMIT_MIR lower_intrinsics.f_unit.PreCodegen.before.mir
38 // EMIT_MIR lower_intrinsics.f_u64.PreCodegen.before.mir
44 pub fn f_dispatch<T>(t: T) {
45 if std::mem::size_of::<T>() == 0 {
53 pub fn f_zst<T>(_t: T) {
57 pub fn f_non_zst<T>(_t: T) {}
59 // EMIT_MIR lower_intrinsics.non_const.LowerIntrinsics.diff
60 pub fn non_const<T>() -> usize {
61 // Check that lowering works with non-const operand as a func.
62 let size_of_t = core::intrinsics::size_of::<T>;
72 // EMIT_MIR lower_intrinsics.discriminant.LowerIntrinsics.diff
73 pub fn discriminant<T>(t: T) {
74 core::intrinsics::discriminant_value(&t);
75 core::intrinsics::discriminant_value(&0);
76 core::intrinsics::discriminant_value(&());
77 core::intrinsics::discriminant_value(&E::B);