parent
61443dc1f5
commit
7067561189
26
src/test/run-pass/borrowck-preserve-box-in-moved-value.rs
Normal file
26
src/test/run-pass/borrowck-preserve-box-in-moved-value.rs
Normal file
@ -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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user