//@ check-pass | |
//! This test checks that dropck knows that ManuallyDrop does not drop its field. | |
#![feature(dropck_eyepatch)] | |
use std::mem::ManuallyDrop; | |
struct S<T>(ManuallyDrop<T>); | |
unsafe impl<#[may_dangle] T> Drop for S<T> { | |
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); | |
} |