Skip to content
Permalink
Browse files

add test for dropping in const

  • Loading branch information
RalfJung committed Dec 24, 2019
1 parent 6253754 commit db20f248ebcd2a6cb5230b3bde7f400a380b0b87
Showing with 43 additions and 0 deletions.
  1. +19 −0 src/test/ui/consts/miri_unleashed/drop.rs
  2. +24 −0 src/test/ui/consts/miri_unleashed/drop.stderr
@@ -0,0 +1,19 @@
// compile-flags: -Zunleash-the-miri-inside-of-you
#![deny(const_err)]

use std::mem::ManuallyDrop;

fn main() {}

static TEST_OK: () = {
let v: Vec<i32> = Vec::new();
let _v = ManuallyDrop::new(v);
};

// Make sure we catch executing bad drop functions.
// The actual error is located in `real_drop_in_place` so we can't capture it with the
// error annotations here.
static TEST_BAD: () = {
let _v: Vec<i32> = Vec::new();
//~^ WARN skipping const check
};
@@ -0,0 +1,24 @@
warning: skipping const checks
--> $DIR/drop.rs:17:9
|
LL | let _v: Vec<i32> = Vec::new();
| ^^

error[E0080]: could not evaluate static initializer
--> $SRC_DIR/libcore/ptr/mod.rs:LL:COL
|
LL | / unsafe fn real_drop_in_place<T: ?Sized>(to_drop: &mut T) {
LL | | // Code here does not matter - this is replaced by the
LL | | // real drop glue by the compiler.
LL | | real_drop_in_place(to_drop)
LL | | }
| |_^ calling non-const function `<std::vec::Vec<i32> as std::ops::Drop>::drop`
|
::: $DIR/drop.rs:19:1
|
LL | };
| - inside call to `std::ptr::real_drop_in_place::<std::vec::Vec<i32>> - shim(Some(std::vec::Vec<i32>))` at $DIR/drop.rs:19:1

error: aborting due to previous error

For more information about this error, try `rustc --explain E0080`.

0 comments on commit db20f24

Please sign in to comment.
You can’t perform that action at this time.