about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/run-pass/borrowck-preserve-box-in-moved-value.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/run-pass/borrowck-preserve-box-in-moved-value.rs b/src/test/run-pass/borrowck-preserve-box-in-moved-value.rs
new file mode 100644
index 00000000000..e8c3b2480d9
--- /dev/null
+++ b/src/test/run-pass/borrowck-preserve-box-in-moved-value.rs
@@ -0,0 +1,26 @@
+// exec-env:RUST_POISON_ON_FREE=1
+
+// Test that we root `x` even though it is found in immutable memory,
+// because it is moved.
+
+#[feature(managed_boxes)];
+
+fn free<T>(x: @T) {}
+
+struct Foo {
+    f: @Bar
+}
+
+struct Bar {
+    g: int
+}
+
+fn lend(x: @Foo) -> int {
+    let y = &x.f.g;
+    free(x); // specifically here, if x is not rooted, it will be freed
+    *y
+}
+
+pub fn main() {
+    assert_eq!(lend(@Foo {f: @Bar {g: 22}}), 22);
+}