// 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) { let __isize = &*x; } fn deref_mut1(x: Rc) { let __isize = &mut *x; //~ ERROR cannot borrow } fn deref_mut2(mut x: Rc) { let __isize = &mut *x; //~ ERROR cannot borrow } fn deref_extend<'a>(x: &'a Rc) -> &'a isize { &**x } fn deref_extend_mut1<'a>(x: &'a Rc) -> &'a mut isize { &mut **x //~ ERROR cannot borrow } fn deref_extend_mut2<'a>(x: &'a mut Rc) -> &'a mut isize { &mut **x //~ ERROR cannot borrow } fn assign1<'a>(x: Rc) { *x = 3; //~ ERROR cannot assign } fn assign2<'a>(x: &'a Rc) { **x = 3; //~ ERROR cannot assign } fn assign3<'a>(x: &'a mut Rc) { **x = 3; //~ ERROR cannot assign } pub fn main() {}