diff options
Diffstat (limited to 'tests/ui/borrowck/borrowck-use-mut-borrow-rpass.rs')
-rw-r--r-- | tests/ui/borrowck/borrowck-use-mut-borrow-rpass.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/ui/borrowck/borrowck-use-mut-borrow-rpass.rs b/tests/ui/borrowck/borrowck-use-mut-borrow-rpass.rs new file mode 100644 index 000000000..1cf763f66 --- /dev/null +++ b/tests/ui/borrowck/borrowck-use-mut-borrow-rpass.rs @@ -0,0 +1,49 @@ +// run-pass +// pretty-expanded FIXME #23616 + +struct A { a: isize, b: Box<isize> } + +fn field_copy_after_field_borrow() { + let mut x = A { a: 1, b: Box::new(2) }; + let p = &mut x.b; + drop(x.a); + **p = 3; +} + +fn fu_field_copy_after_field_borrow() { + let mut x = A { a: 1, b: Box::new(2) }; + let p = &mut x.b; + let y = A { b: Box::new(3), .. x }; + drop(y); + **p = 4; +} + +fn field_deref_after_field_borrow() { + let mut x = A { a: 1, b: Box::new(2) }; + let p = &mut x.a; + drop(*x.b); + *p = 3; +} + +fn field_move_after_field_borrow() { + let mut x = A { a: 1, b: Box::new(2) }; + let p = &mut x.a; + drop(x.b); + *p = 3; +} + +fn fu_field_move_after_field_borrow() { + let mut x = A { a: 1, b: Box::new(2) }; + let p = &mut x.a; + let y = A { a: 3, .. x }; + drop(y); + *p = 4; +} + +fn main() { + field_copy_after_field_borrow(); + fu_field_copy_after_field_borrow(); + field_deref_after_field_borrow(); + field_move_after_field_borrow(); + fu_field_move_after_field_borrow(); +} |