// The purpose of this file is to track the error messages from Pin and DerefMut interacting. //@ check-fail use std::ops::DerefMut; use std::pin::Pin; struct MyUnpinType {} impl MyUnpinType { fn at_self(&self) {} fn at_mut_self(&mut self) {} } struct MyPinType(core::marker::PhantomPinned); impl MyPinType { fn at_self(&self) {} fn at_mut_self(&mut self) {} } fn impl_deref_mut(_: impl DerefMut) {} fn unpin_impl_ref(r_unpin: Pin<&MyUnpinType>) { impl_deref_mut(r_unpin) //~^ ERROR: the trait bound `Pin<&MyUnpinType>: DerefMut` is not satisfied } fn unpin_impl_mut(r_unpin: Pin<&mut MyUnpinType>) { impl_deref_mut(r_unpin) } fn pin_impl_ref(r_pin: Pin<&MyPinType>) { impl_deref_mut(r_pin) //~^ ERROR: `PhantomPinned` cannot be unpinned //~| ERROR: the trait bound `Pin<&MyPinType>: DerefMut` is not satisfied } fn pin_impl_mut(r_pin: Pin<&mut MyPinType>) { impl_deref_mut(r_pin) //~^ ERROR: `PhantomPinned` cannot be unpinned } fn main() {}