--- /dev/null
+// 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
+};
--- /dev/null
+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`.