summaryrefslogtreecommitdiffstats
path: root/tests/ui/borrowck/borrowck-uniq-via-lend.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/borrowck/borrowck-uniq-via-lend.rs')
-rw-r--r--tests/ui/borrowck/borrowck-uniq-via-lend.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/ui/borrowck/borrowck-uniq-via-lend.rs b/tests/ui/borrowck/borrowck-uniq-via-lend.rs
new file mode 100644
index 000000000..25d3e0b54
--- /dev/null
+++ b/tests/ui/borrowck/borrowck-uniq-via-lend.rs
@@ -0,0 +1,61 @@
+fn borrow(_v: &isize) {}
+
+
+
+
+
+fn local() {
+ let mut v: Box<_> = Box::new(3);
+ borrow(&*v);
+}
+
+fn local_rec() {
+ struct F { f: Box<isize> }
+ let mut v = F {f: Box::new(3)};
+ borrow(&*v.f);
+}
+
+fn local_recs() {
+ struct F { f: G }
+ struct G { g: H }
+ struct H { h: Box<isize> }
+ let mut v = F {f: G {g: H {h: Box::new(3)}}};
+ borrow(&*v.f.g.h);
+}
+
+fn aliased_imm() {
+ let mut v: Box<_> = Box::new(3);
+ let w = &v;
+ borrow(&*v);
+ w.use_ref();
+}
+
+fn aliased_mut() {
+ let mut v: Box<_> = Box::new(3);
+ let w = &mut v;
+ borrow(&*v); //~ ERROR cannot borrow `*v`
+ w.use_mut();
+}
+
+fn aliased_other() {
+ let mut v: Box<_> = Box::new(3);
+ let mut w: Box<_> = Box::new(4);
+ let x = &mut w;
+ borrow(&*v);
+ x.use_mut();
+}
+
+fn aliased_other_reassign() {
+ let mut v: Box<_> = Box::new(3);
+ let mut w: Box<_> = Box::new(4);
+ let mut x = &mut w;
+ x = &mut v;
+ borrow(&*v); //~ ERROR cannot borrow `*v`
+ x.use_mut();
+}
+
+fn main() {
+}
+
+trait Fake { fn use_mut(&mut self) { } fn use_ref(&self) { } }
+impl<T> Fake for T { }