]> git.proxmox.com Git - rustc.git/blob - src/test/ui/fixup-deref-mut.rs
New upstream version 1.38.0+dfsg1
[rustc.git] / src / test / ui / fixup-deref-mut.rs
1 // run-pass
2
3 #![allow(dead_code)]
4 // pretty-expanded FIXME #23616
5
6 use std::ops::{Deref, DerefMut};
7
8 // Generic unique/owned smaht pointer.
9 struct Own<T> {
10 value: *mut T
11 }
12
13 impl<T> Deref for Own<T> {
14 type Target = T;
15
16 fn deref<'a>(&'a self) -> &'a T {
17 unsafe { &*self.value }
18 }
19 }
20
21 impl<T> DerefMut for Own<T> {
22 fn deref_mut<'a>(&'a mut self) -> &'a mut T {
23 unsafe { &mut *self.value }
24 }
25 }
26
27 struct Point {
28 x: isize,
29 y: isize
30 }
31
32 impl Point {
33 fn get(&mut self) -> (isize, isize) {
34 (self.x, self.y)
35 }
36 }
37
38 fn test0(mut x: Own<Point>) {
39 let _ = x.get();
40 }
41
42 fn test1(mut x: Own<Own<Own<Point>>>) {
43 let _ = x.get();
44 }
45
46 fn test2(mut x: Own<Own<Own<Point>>>) {
47 let _ = (**x).get();
48 }
49
50 fn main() {}