// With -Zub-checks=yes (enabled by default by -Cdebug-assertions=yes) we will produce a runtime // check that the index to slice::get_unchecked is in-bounds of the slice. That is tested for by // tests/ui/precondition-checks/out-of-bounds-get-unchecked.rs // // This test ensures that such a runtime check is *not* emitted when debug-assertions are enabled, // but ub-checks are explicitly disabled. //@ revisions: DEBUG NOCHECKS //@ [DEBUG] compile-flags: //@ [NOCHECKS] compile-flags: -Zub-checks=no //@ compile-flags: -O -Cdebug-assertions=yes #![crate_type = "lib"] use std::ops::Range; // CHECK-LABEL: @slice_get_unchecked( #[no_mangle] pub unsafe fn slice_get_unchecked(x: &[i32], i: usize) -> &i32 { // CHECK: icmp ult // NOCHECKS: tail call void @llvm.assume // DEBUG: br i1 // DEBUG: call core::panicking::panic_nounwind // DEBUG: unreachable // CHECK: getelementptr inbounds // CHECK: ret ptr x.get_unchecked(i) }