Rollup merge of #88954 - nbdd0121:panic3, r=oli-obk
Allow `panic!("{}", computed_str)` in const fn.
Special-case `panic!("{}", arg)` and translate it to `panic_display(&arg)`. `panic_display` will behave like `panic_any` in cosnt eval and behave like `panic!(format_args!("{}", arg))` in runtime.
This should bring Rust 2015 and 2021 to feature parity in terms of `const_panic`; and hopefully would unblock the stabilisation of #51999.
`@rustbot` modify labels: +T-compiler +T-libs +A-const-eval +A-const-fn
r? `@oli-obk`
This commit is contained in:
commit
eb62779f2d
14 changed files with 135 additions and 46 deletions
|
|
@ -15,10 +15,13 @@ const Y: () = std::unreachable!();
|
|||
|
||||
const X: () = std::unimplemented!();
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
//
|
||||
|
||||
const W: () = std::panic!(MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const W2: () = std::panic!("{}", MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const Z_CORE: () = core::panic!("cheese");
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
|
|
@ -33,3 +36,6 @@ const X_CORE: () = core::unimplemented!();
|
|||
|
||||
const W_CORE: () = core::panic!(MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const W2_CORE: () = core::panic!("{}", MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
|
|
|||
|
|
@ -39,45 +39,61 @@ LL | const W: () = std::panic!(MSG);
|
|||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:22:20
|
||||
--> $DIR/const_panic.rs:22:16
|
||||
|
|
||||
LL | const W2: () = std::panic!("{}", MSG);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic.rs:22:16
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:25:20
|
||||
|
|
||||
LL | const Z_CORE: () = core::panic!("cheese");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'cheese', $DIR/const_panic.rs:22:20
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'cheese', $DIR/const_panic.rs:25:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:25:21
|
||||
--> $DIR/const_panic.rs:28:21
|
||||
|
|
||||
LL | const Z2_CORE: () = core::panic!();
|
||||
| ^^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic.rs:25:21
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:28:20
|
||||
|
|
||||
LL | const Y_CORE: () = core::unreachable!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic.rs:28:20
|
||||
| ^^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic.rs:28:21
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:31:20
|
||||
|
|
||||
LL | const X_CORE: () = core::unimplemented!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic.rs:31:20
|
||||
LL | const Y_CORE: () = core::unreachable!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic.rs:31:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:34:20
|
||||
|
|
||||
LL | const W_CORE: () = core::panic!(MSG);
|
||||
| ^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic.rs:34:20
|
||||
LL | const X_CORE: () = core::unimplemented!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic.rs:34:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:37:20
|
||||
|
|
||||
LL | const W_CORE: () = core::panic!(MSG);
|
||||
| ^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic.rs:37:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic.rs:40:21
|
||||
|
|
||||
LL | const W2_CORE: () = core::panic!("{}", MSG);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic.rs:40:21
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0080`.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#![feature(const_panic)]
|
||||
#![crate_type = "lib"]
|
||||
|
||||
const MSG: &str = "hello";
|
||||
|
||||
const A: () = std::panic!("blåhaj");
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
|
|
@ -14,14 +16,20 @@ const C: () = std::unreachable!();
|
|||
const D: () = std::unimplemented!();
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const E: () = core::panic!("shark");
|
||||
const E: () = std::panic!("{}", MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const F: () = core::panic!();
|
||||
const A_CORE: () = core::panic!("shark");
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const G: () = core::unreachable!();
|
||||
const B_CORE: () = core::panic!();
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const H: () = core::unimplemented!();
|
||||
const C_CORE: () = core::unreachable!();
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const D_CORE: () = core::unimplemented!();
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
||||
const E_CORE: () = core::panic!("{}", MSG);
|
||||
//~^ ERROR evaluation of constant value failed
|
||||
|
|
|
|||
|
|
@ -1,67 +1,83 @@
|
|||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:5:15
|
||||
--> $DIR/const_panic_2021.rs:7:15
|
||||
|
|
||||
LL | const A: () = std::panic!("blåhaj");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'blåhaj', $DIR/const_panic_2021.rs:5:15
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'blåhaj', $DIR/const_panic_2021.rs:7:15
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:8:15
|
||||
--> $DIR/const_panic_2021.rs:10:15
|
||||
|
|
||||
LL | const B: () = std::panic!();
|
||||
| ^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic_2021.rs:8:15
|
||||
| ^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic_2021.rs:10:15
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:11:15
|
||||
--> $DIR/const_panic_2021.rs:13:15
|
||||
|
|
||||
LL | const C: () = std::unreachable!();
|
||||
| ^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic_2021.rs:11:15
|
||||
| ^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic_2021.rs:13:15
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:14:15
|
||||
--> $DIR/const_panic_2021.rs:16:15
|
||||
|
|
||||
LL | const D: () = std::unimplemented!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic_2021.rs:14:15
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic_2021.rs:16:15
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:17:15
|
||||
--> $DIR/const_panic_2021.rs:19:15
|
||||
|
|
||||
LL | const E: () = core::panic!("shark");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'shark', $DIR/const_panic_2021.rs:17:15
|
||||
LL | const E: () = std::panic!("{}", MSG);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic_2021.rs:19:15
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:20:15
|
||||
--> $DIR/const_panic_2021.rs:22:20
|
||||
|
|
||||
LL | const F: () = core::panic!();
|
||||
| ^^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic_2021.rs:20:15
|
||||
LL | const A_CORE: () = core::panic!("shark");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'shark', $DIR/const_panic_2021.rs:22:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:23:15
|
||||
--> $DIR/const_panic_2021.rs:25:20
|
||||
|
|
||||
LL | const G: () = core::unreachable!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic_2021.rs:23:15
|
||||
LL | const B_CORE: () = core::panic!();
|
||||
| ^^^^^^^^^^^^^^ the evaluated program panicked at 'explicit panic', $DIR/const_panic_2021.rs:25:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:28:20
|
||||
|
|
||||
LL | const C_CORE: () = core::unreachable!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'internal error: entered unreachable code', $DIR/const_panic_2021.rs:28:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:26:15
|
||||
--> $DIR/const_panic_2021.rs:31:20
|
||||
|
|
||||
LL | const H: () = core::unimplemented!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic_2021.rs:26:15
|
||||
LL | const D_CORE: () = core::unimplemented!();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'not implemented', $DIR/const_panic_2021.rs:31:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/const_panic_2021.rs:34:20
|
||||
|
|
||||
LL | const E_CORE: () = core::panic!("{}", MSG);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'hello', $DIR/const_panic_2021.rs:34:20
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2021` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0080`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue