| // rust-lang/rust#22323: regression test demonstrating that NLL | |
| // precisely tracks temporary destruction order. | |
| //@ check-pass | |
| fn main() { | |
| let _s = construct().borrow().consume_borrowed(); | |
| } | |
| fn construct() -> Value { Value } | |
| pub struct Value; | |
| impl Value { | |
| fn borrow<'a>(&'a self) -> Borrowed<'a> { unimplemented!() } | |
| } | |
| pub struct Borrowed<'a> { | |
| _inner: Guard<'a, Value>, | |
| } | |
| impl<'a> Borrowed<'a> { | |
| fn consume_borrowed(self) -> String { unimplemented!() } | |
| } | |
| pub struct Guard<'a, T: ?Sized + 'a> { | |
| _lock: &'a T, | |
| } | |
| impl<'a, T: ?Sized> Drop for Guard<'a, T> { fn drop(&mut self) {} } |