summaryrefslogtreecommitdiffstats
path: root/tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs')
-rw-r--r--tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs b/tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs
new file mode 100644
index 000000000..7a88c3df2
--- /dev/null
+++ b/tests/ui/borrowck/borrowck-borrow-mut-base-ptr-in-aliasable-loc.rs
@@ -0,0 +1,24 @@
+// Test that attempt to reborrow an `&mut` pointer in an aliasable
+// location yields an error.
+//
+// Example from compiler/rustc_borrowck/borrowck/README.md
+
+fn foo(t0: & &mut isize) {
+ let t1 = t0;
+ let p: &isize = &**t0;
+ **t1 = 22; //~ ERROR cannot assign
+}
+
+fn foo3(t0: &mut &mut isize) {
+ let t1 = &mut *t0;
+ let p: &isize = &**t0; //~ ERROR cannot borrow
+ **t1 = 22;
+}
+
+fn foo4(t0: & &mut isize) {
+ let x: &mut isize = &mut **t0; //~ ERROR cannot borrow
+ *x += 1;
+}
+
+fn main() {
+}