about summary refs log tree commit diff
path: root/tests/ui/object-lifetime/object-lifetime-default-mybox.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/object-lifetime/object-lifetime-default-mybox.rs')
-rw-r--r--tests/ui/object-lifetime/object-lifetime-default-mybox.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/ui/object-lifetime/object-lifetime-default-mybox.rs b/tests/ui/object-lifetime/object-lifetime-default-mybox.rs
new file mode 100644
index 00000000000..5e6e5e2c063
--- /dev/null
+++ b/tests/ui/object-lifetime/object-lifetime-default-mybox.rs
@@ -0,0 +1,37 @@
+// Test a "pass-through" object-lifetime-default that produces errors.
+
+#![allow(dead_code)]
+
+trait SomeTrait {
+    fn dummy(&self) { }
+}
+
+struct MyBox<T:?Sized> {
+    r: Box<T>
+}
+
+fn deref<T>(ss: &T) -> T {
+    // produces the type of a deref without worrying about whether a
+    // move out would actually be legal
+    loop { }
+}
+
+fn load0(ss: &MyBox<dyn SomeTrait>) -> MyBox<dyn SomeTrait> {
+    deref(ss)
+}
+
+fn load1<'a,'b>(a: &'a MyBox<dyn SomeTrait>,
+                b: &'b MyBox<dyn SomeTrait>)
+                -> &'b MyBox<dyn SomeTrait>
+{
+    a
+    //~^ ERROR lifetime may not live long enough
+}
+
+fn load2<'a>(ss: &MyBox<dyn SomeTrait + 'a>) -> MyBox<dyn SomeTrait + 'a> {
+    load0(ss)
+    //~^ ERROR borrowed data escapes outside of function
+}
+
+fn main() {
+}