From 3feffd48bd393f26639b6da127d8c43f4ce51d89 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Wed, 19 Sep 2018 14:33:11 +0200 Subject: [PATCH] Regression test for rust-lang/rust#22323. --- .../ui/nll/issue-22323-temp-destruction.rs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/ui/nll/issue-22323-temp-destruction.rs diff --git a/src/test/ui/nll/issue-22323-temp-destruction.rs b/src/test/ui/nll/issue-22323-temp-destruction.rs new file mode 100644 index 0000000000000..2c547fb7c7da7 --- /dev/null +++ b/src/test/ui/nll/issue-22323-temp-destruction.rs @@ -0,0 +1,32 @@ +// rust-lang/rust#22323: regression test demonstrating that NLL +// precisely tracks temporary destruction order. + +// compile-pass + +#![feature(nll)] + +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) {} }