diff options
Diffstat (limited to 'tests/ui/borrowck/borrowck-borrow-overloaded-deref.rs')
-rw-r--r-- | tests/ui/borrowck/borrowck-borrow-overloaded-deref.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/ui/borrowck/borrowck-borrow-overloaded-deref.rs b/tests/ui/borrowck/borrowck-borrow-overloaded-deref.rs new file mode 100644 index 000000000..2b98a7b94 --- /dev/null +++ b/tests/ui/borrowck/borrowck-borrow-overloaded-deref.rs @@ -0,0 +1,43 @@ +// Test how overloaded deref interacts with borrows when only +// Deref and not DerefMut is implemented. + +use std::ops::Deref; +use std::rc::Rc; + +fn deref_imm(x: Rc<isize>) { + let __isize = &*x; +} + +fn deref_mut1(x: Rc<isize>) { + let __isize = &mut *x; //~ ERROR cannot borrow +} + +fn deref_mut2(mut x: Rc<isize>) { + let __isize = &mut *x; //~ ERROR cannot borrow +} + +fn deref_extend<'a>(x: &'a Rc<isize>) -> &'a isize { + &**x +} + +fn deref_extend_mut1<'a>(x: &'a Rc<isize>) -> &'a mut isize { + &mut **x //~ ERROR cannot borrow +} + +fn deref_extend_mut2<'a>(x: &'a mut Rc<isize>) -> &'a mut isize { + &mut **x //~ ERROR cannot borrow +} + +fn assign1<'a>(x: Rc<isize>) { + *x = 3; //~ ERROR cannot assign +} + +fn assign2<'a>(x: &'a Rc<isize>) { + **x = 3; //~ ERROR cannot assign +} + +fn assign3<'a>(x: &'a mut Rc<isize>) { + **x = 3; //~ ERROR cannot assign +} + +pub fn main() {} |