From f6f5180d5fef3b3a4cc8a383eb20b83716935e6a Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Wed, 1 Sep 2021 11:55:16 +0000 Subject: [PATCH] Add a simple test case --- .../rfc-2632-const-trait-impl/const-drop.rs | 23 +++++++++++++++++ .../const-drop.stderr | 25 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/test/ui/rfc-2632-const-trait-impl/const-drop.rs create mode 100644 src/test/ui/rfc-2632-const-trait-impl/const-drop.stderr diff --git a/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs b/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs new file mode 100644 index 00000000000..90fe28c7367 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs @@ -0,0 +1,23 @@ +#![feature(const_trait_impl)] +#![feature(const_fn_trait_bound)] +#![feature(const_mut_refs)] +#![feature(const_panic)] + +struct S; + +impl const Drop for S { + fn drop(&mut self) { + // NB: There is no way to tell that a const destructor is ran, + // because even if we can operate on mutable variables, it will + // not be reflected because everything is `const`. So we panic + // here, attempting to make the CTFE engine error. + panic!("much const drop") + //~^ ERROR evaluation of constant value failed + } +} + +const fn a(_: T) {} + +const _: () = a(S); + +fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/const-drop.stderr b/src/test/ui/rfc-2632-const-trait-impl/const-drop.stderr new file mode 100644 index 00000000000..33eba4f4d25 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/const-drop.stderr @@ -0,0 +1,25 @@ +error[E0080]: evaluation of constant value failed + --> $DIR/const-drop.rs:14:9 + | +LL | panic!("much const drop") + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + | | + | the evaluated program panicked at 'much const drop', $DIR/const-drop.rs:14:9 + | inside `::drop` at $SRC_DIR/std/src/panic.rs:LL:COL +... +LL | const fn a(_: T) {} + | - inside `a::` at $DIR/const-drop.rs:19:35 +LL | +LL | const _: () = a(S); + | ---- inside `_` at $DIR/const-drop.rs:21:15 + | + ::: $SRC_DIR/core/src/ptr/mod.rs:LL:COL + | +LL | pub unsafe fn drop_in_place(to_drop: *mut T) { + | ------------------------------------------------------- inside `std::ptr::drop_in_place:: - shim(Some(S))` at $SRC_DIR/core/src/ptr/mod.rs:LL:COL + | + = 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 previous error + +For more information about this error, try `rustc --explain E0080`.