1 #![feature(untagged_unions)]
4 use std::ops::{Deref, DerefMut};
12 fn new(value: T) -> Self { MockBox { value: [value] } }
15 impl<T> Deref for MockBox<T> {
17 fn deref(&self) -> &T { &self.value[0] }
20 impl<T> DerefMut for MockBox<T> {
21 fn deref_mut(&mut self) -> &mut T { &mut self.value[0] }
30 fn new() -> Self { MockVec { value: [] } }
33 impl<T> Deref for MockVec<T> {
35 fn deref(&self) -> &[T] { &self.value }
38 impl<T> DerefMut for MockVec<T> {
39 fn deref_mut(&mut self) -> &mut [T] { &mut self.value }
44 x: ((MockVec<u8>, MockVec<u8>), MockVec<u8>),
45 y: MockBox<MockVec<u8>>,
48 fn use_borrow<T>(_: &T) {}
50 unsafe fn parent_sibling_borrow() {
51 let mut u = U { x: ((MockVec::new(), MockVec::new()), MockVec::new()) };
53 let b = &u.y; //~ ERROR cannot borrow `u` (via `u.y`)
57 unsafe fn parent_sibling_move() {
58 let u = U { x: ((MockVec::new(), MockVec::new()), MockVec::new()) };
60 let b = u.y; //~ ERROR use of moved value: `u`
63 unsafe fn grandparent_sibling_borrow() {
64 let mut u = U { x: ((MockVec::new(), MockVec::new()), MockVec::new()) };
65 let a = &mut (u.x.0).0;
66 let b = &u.y; //~ ERROR cannot borrow `u` (via `u.y`)
70 unsafe fn grandparent_sibling_move() {
71 let u = U { x: ((MockVec::new(), MockVec::new()), MockVec::new()) };
73 let b = u.y; //~ ERROR use of moved value: `u`
76 unsafe fn deref_sibling_borrow() {
77 let mut u = U { y: MockBox::default() };
79 let b = &u.x; //~ ERROR cannot borrow `u` (via `u.x`)
83 unsafe fn deref_sibling_move() {
84 let u = U { x: ((MockVec::new(), MockVec::new()), MockVec::new()) };
85 // No way to test deref-move without Box in union
87 // let b = u.x; ERROR use of moved value: `u`