//@ check-pass //! This test checks that dropck knows that ManuallyDrop does not drop its field. #![feature(dropck_eyepatch)] use std::mem::ManuallyDrop; struct S(ManuallyDrop); unsafe impl<#[may_dangle] T> Drop for S { fn drop(&mut self) {} } struct NonTrivialDrop<'a>(&'a str); impl<'a> Drop for NonTrivialDrop<'a> { fn drop(&mut self) {} } fn main() { let s = String::from("string"); let _t = S(ManuallyDrop::new(NonTrivialDrop(&s))); drop(s); }