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 index 90fe28c7367..24b0d53b6c3 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs @@ -1,23 +1,28 @@ +// run-pass #![feature(const_trait_impl)] #![feature(const_fn_trait_bound)] #![feature(const_mut_refs)] #![feature(const_panic)] -struct S; +struct S<'a>(&'a mut u8); -impl const Drop for S { +impl<'a> const Drop for S<'a> { 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 + *self.0 += 1; } } const fn a(_: T) {} -const _: () = a(S); +const fn b() -> u8 { + let mut c = 0; + let _ = S(&mut c); + a(S(&mut c)); + c +} -fn main() {} +const C: u8 = b(); + +fn main() { + assert_eq!(C, 2); +} 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 deleted file mode 100644 index 33eba4f4d25..00000000000 --- a/src/test/ui/rfc-2632-const-trait-impl/const-drop.stderr +++ /dev/null @@ -1,25 +0,0 @@ -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`.