1 // compile-flags: -Cpanic=abort
2 #![feature(core_intrinsics)]
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);
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.forget.LowerIntrinsics.diff
18 pub fn forget<T>(t: T) {
19 core::intrinsics::forget(t)
22 // EMIT_MIR lower_intrinsics.unreachable.LowerIntrinsics.diff
23 pub fn unreachable() -> ! {
24 unsafe { core::intrinsics::unreachable() };
27 // EMIT_MIR lower_intrinsics.f_unit.PreCodegen.before.mir
33 // EMIT_MIR lower_intrinsics.f_u64.PreCodegen.before.mir
39 pub fn f_dispatch<T>(t: T) {
40 if std::mem::size_of::<T>() == 0 {
48 pub fn f_zst<T>(_t: T) {
52 pub fn f_non_zst<T>(_t: T) {}
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>;
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);