summaryrefslogtreecommitdiffstats
path: root/tests/ui/nll/issue-22323-temp-destruction.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/nll/issue-22323-temp-destruction.rs')
-rw-r--r--tests/ui/nll/issue-22323-temp-destruction.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/ui/nll/issue-22323-temp-destruction.rs b/tests/ui/nll/issue-22323-temp-destruction.rs
new file mode 100644
index 000000000..3f2ece1cf
--- /dev/null
+++ b/tests/ui/nll/issue-22323-temp-destruction.rs
@@ -0,0 +1,30 @@
+// 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) {} }