Rollup merge of #89509 - jhpratt:stabilize-const_unreachable_unchecked, r=oli-obk

Stabilize `unreachable_unchecked` as `const fn`

Closes #53188

This PR stabilizes `core::hint::unreachable_unchecked` as `const fn`. MIRI is able to detect when this method is called. Stabilization was delayed until `const_panic` was stabilized so as to avoid users calling this method in its place (thus resulting in runtime UB). With #89508, that is no longer an issue.

````@rustbot```` label +A-const-eval +A-const-fn +T-lang +S-blocked

(not sure why it's T-lang, but that's what the tracking issue is)
This commit is contained in:
Matthias Krüger 2021-10-16 08:02:20 +02:00 committed by GitHub
commit 9ae0804859
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 7 additions and 11 deletions

View file

@ -1,7 +1,5 @@
// run-pass
#![feature(const_unreachable_unchecked)]
const unsafe fn foo(x: bool) -> bool {
match x {
true => true,
@ -12,5 +10,5 @@ const unsafe fn foo(x: bool) -> bool {
const BAR: bool = unsafe { foo(true) };
fn main() {
assert_eq!(BAR, true);
assert_eq!(BAR, true);
}

View file

@ -1,5 +1,4 @@
// error-pattern: evaluation of constant value failed
#![feature(const_unreachable_unchecked)]
const unsafe fn foo(x: bool) -> bool {
match x {
@ -11,5 +10,5 @@ const unsafe fn foo(x: bool) -> bool {
const BAR: bool = unsafe { foo(false) };
fn main() {
assert_eq!(BAR, true);
assert_eq!(BAR, true);
}

View file

@ -7,13 +7,13 @@ LL | unsafe { intrinsics::unreachable() }
| entering unreachable code
| inside `unreachable_unchecked` at $SRC_DIR/core/src/hint.rs:LL:COL
|
::: $DIR/const_unsafe_unreachable_ub.rs:7:18
::: $DIR/const_unsafe_unreachable_ub.rs:6:18
|
LL | false => std::hint::unreachable_unchecked(),
| ---------------------------------- inside `foo` at $DIR/const_unsafe_unreachable_ub.rs:7:18
| ---------------------------------- inside `foo` at $DIR/const_unsafe_unreachable_ub.rs:6:18
...
LL | const BAR: bool = unsafe { foo(false) };
| ---------- inside `BAR` at $DIR/const_unsafe_unreachable_ub.rs:11:28
| ---------- inside `BAR` at $DIR/const_unsafe_unreachable_ub.rs:10:28
error: aborting due to previous error