diff options
Diffstat (limited to 'tests/mir-opt/instsimplify/intrinsic_asserts.rs')
-rw-r--r-- | tests/mir-opt/instsimplify/intrinsic_asserts.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/mir-opt/instsimplify/intrinsic_asserts.rs b/tests/mir-opt/instsimplify/intrinsic_asserts.rs new file mode 100644 index 000000000..43998b2db --- /dev/null +++ b/tests/mir-opt/instsimplify/intrinsic_asserts.rs @@ -0,0 +1,50 @@ +// unit-test: InstSimplify + +#![crate_type = "lib"] +#![feature(core_intrinsics)] + +// All these assertions pass, so all the intrinsic calls should be deleted. +// EMIT_MIR intrinsic_asserts.removable.InstSimplify.diff +pub fn removable() { + // CHECK-LABEL: fn removable( + // CHECK-NOT: assert_inhabited + // CHECK-NOT: assert_zero_valid + // CHECK-NOT: assert_mem_uninitialized_valid + core::intrinsics::assert_inhabited::<()>(); + core::intrinsics::assert_zero_valid::<u8>(); + core::intrinsics::assert_mem_uninitialized_valid::<u8>(); +} + +enum Never {} + +// These assertions all diverge, so their target blocks should become None. +// EMIT_MIR intrinsic_asserts.panics.InstSimplify.diff +pub fn panics() { + // CHECK-LABEL: fn panics( + // CHECK: assert_inhabited::<Never>() -> unwind + // CHECK: assert_zero_valid::<&u8>() -> unwind + // CHECK: assert_mem_uninitialized_valid::<&u8>() -> unwind + core::intrinsics::assert_inhabited::<Never>(); + core::intrinsics::assert_zero_valid::<&u8>(); + core::intrinsics::assert_mem_uninitialized_valid::<&u8>(); +} + +// Whether or not these asserts pass isn't known, so they shouldn't be modified. +// EMIT_MIR intrinsic_asserts.generic.InstSimplify.diff +pub fn generic<T>() { + // CHECK-LABEL: fn generic( + // CHECK: assert_inhabited::<T>() -> [return: + // CHECK: assert_zero_valid::<T>() -> [return: + // CHECK: assert_mem_uninitialized_valid::<T>() -> [return: + core::intrinsics::assert_inhabited::<T>(); + core::intrinsics::assert_zero_valid::<T>(); + core::intrinsics::assert_mem_uninitialized_valid::<T>(); +} + +// Whether or not these asserts pass isn't known, so they shouldn't be modified. +// EMIT_MIR intrinsic_asserts.generic_ref.InstSimplify.diff +pub fn generic_ref<T>() { + // CHECK-LABEL: fn generic_ref( + // CHECK: assert_mem_uninitialized_valid::<&T>() -> [return: + core::intrinsics::assert_mem_uninitialized_valid::<&T>(); +} |