Skip to content

Tracking Issue for const unreachable_unchecked #53188

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
gnzlbg opened this issue Aug 8, 2018 · 9 comments · Fixed by #74459 or #89509
Closed

Tracking Issue for const unreachable_unchecked #53188

gnzlbg opened this issue Aug 8, 2018 · 9 comments · Fixed by #74459 or #89509
Labels
A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC T-lang Relevant to the language team, which will review and decide on the PR/issue.

Comments

@gnzlbg
Copy link
Contributor

gnzlbg commented Aug 8, 2018

Currently one cannot call unreachable_unchecked in constant functions, so one cannot add hints of the form:

const fn foo(x: i32) -> i32 {
    if x < 0 { unreachable_unchecked() } else { x * 2 } 
}

These types of hints can heavily influence code generation, which can substantially change the performance of const fn when they are invoked at run-time.

It would be a shame to have to write and call foo_compile_time and foo_run_time because the code generated for foo_compile_time is sub-par.

This issue has been assigned to @canova via this comment.

@oli-obk
Copy link
Contributor

oli-obk commented Aug 8, 2018

One cannot do any sort of conditional control flow, so unreachable_unchecked would currently be less than useless. Any test you can write would be undefined behaviour

@oli-obk oli-obk added A-const-fn A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) labels Aug 8, 2018
@gnzlbg
Copy link
Contributor Author

gnzlbg commented Aug 8, 2018

@oli-obk the RFC for if/match in const was merged and is pending an implementation right? When that's implemented, will unreachable_unchecked still be useless?

@oli-obk
Copy link
Contributor

oli-obk commented Aug 8, 2018

No it makes sense after we have conditional control flow.

@oli-obk oli-obk added the S-blocked Status: Blocked on something else such as an RFC or other implementation work. label Aug 8, 2018
@q2p
Copy link

q2p commented Mar 21, 2020

As I understand if / match in const functions is now implemented.
Can unreachable_unchecked be made into a const fn now?

@oli-obk
Copy link
Contributor

oli-obk commented Mar 22, 2020

yes. Basically you just need to add the rustc_const_unstable attribute to the intrinsic and wrapper function. This is documented at https://rustc-dev-guide.rust-lang.org/stability.html?highlight=rustc_const_un#rustc_const_unstable Let me know if anything is unclear (in which case we should update the guide)

@jonas-schievink jonas-schievink added C-feature-accepted Category: A feature request that has been accepted pending implementation. T-lang Relevant to the language team, which will review and decide on the PR/issue. and removed S-blocked Status: Blocked on something else such as an RFC or other implementation work. labels Mar 23, 2020
@canova
Copy link
Contributor

canova commented Jul 17, 2020

Hi, It looks like previous PR is not being worked on currently. I'm working on this and will create a PR soon.
@rustbot claim

@josephlr
Copy link
Contributor

As mentioned in #76209, this issue should be reopened (to track stablization)

@tesuji
Copy link
Contributor

tesuji commented Sep 20, 2020

cc @RalfJung ^

@oli-obk oli-obk reopened this Sep 20, 2020
@jhpratt
Copy link
Member

jhpratt commented May 10, 2021

After a short discussion on Zulip, it was decided that it's best to wait for const_panic to stabilize to avoid a potential footgun wherein users use this instead of panic!(), leading to UB at runtime.

I'm subscribed to the const_panic issue and intend to file a PR to stabilize this once the aforementioned happens.

@jonas-schievink jonas-schievink added C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC and removed C-feature-accepted Category: A feature request that has been accepted pending implementation. labels Jun 27, 2021
@jonas-schievink jonas-schievink changed the title Consider making unreachable_unchecked const Tracking Issue for const unreachable_unchecked Jun 27, 2021
JohnTitor added a commit to JohnTitor/rust that referenced this issue Oct 15, 2021
…_unchecked, r=oli-obk

Stabilize `unreachable_unchecked` as `const fn`

Closes rust-lang#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 rust-lang#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)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Oct 15, 2021
…_unchecked, r=oli-obk

Stabilize `unreachable_unchecked` as `const fn`

Closes rust-lang#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 rust-lang#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)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Oct 15, 2021
…_unchecked, r=oli-obk

Stabilize `unreachable_unchecked` as `const fn`

Closes rust-lang#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 rust-lang#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)
jackh726 added a commit to jackh726/rust that referenced this issue Oct 16, 2021
…_unchecked, r=oli-obk

Stabilize `unreachable_unchecked` as `const fn`

Closes rust-lang#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 rust-lang#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)
@bors bors closed this as completed in 9ae0804 Oct 16, 2021
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-const-eval Area: Constant evaluation, covers all const contexts (static, const fn, ...) C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects
None yet
9 participants