summaryrefslogtreecommitdiffstats
path: root/src/test/ui/borrowck/borrowck-borrow-overloaded-deref.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/borrowck/borrowck-borrow-overloaded-deref.rs')
-rw-r--r--src/test/ui/borrowck/borrowck-borrow-overloaded-deref.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/borrowck-borrow-overloaded-deref.rs b/src/test/ui/borrowck/borrowck-borrow-overloaded-deref.rs
new file mode 100644
index 000000000..2b98a7b94
--- /dev/null
+++ b/src/test/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() {}