| //@ check-pass |
| |
| #![feature(pin_ergonomics)] |
| #![allow(dead_code, incomplete_features)] |
| |
| use std::pin::Pin; |
| |
| struct Foo; |
| |
| impl Foo { |
| fn baz(self: Pin<&mut Self>) { |
| } |
| } |
| |
| fn foo(_: Pin<&mut Foo>) { |
| } |
| |
| fn foo_const(_: Pin<&Foo>) { |
| } |
| |
| fn bar(x: Pin<&mut Foo>) { |
| foo(x); |
| foo(x); // for this to work we need to automatically reborrow, |
| // as if the user had written `foo(x.as_mut())`. |
| |
| Foo::baz(x); |
| Foo::baz(x); |
| |
| foo_const(x); // make sure we can reborrow &mut as &. |
| |
| let x: Pin<&Foo> = Pin::new(&Foo); |
| |
| foo_const(x); // make sure reborrowing from & to & works. |
| } |
| |
| fn main() {} |