]> git.lizzy.rs Git - rust.git/blob - src/test/ui/fixup-deref-mut.rs
Auto merge of #75936 - sdroege:chunks-exact-construction-bounds-check, r=nagisa
[rust.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() {}