]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-13264.rs
Rollup merge of #92942 - Xaeroxe:raw_arg, r=dtolnay
[rust.git] / src / test / ui / issues / issue-13264.rs
1 // run-pass
2 #![allow(non_camel_case_types)]
3 #![allow(non_snake_case)]
4
5 use std::ops::Deref;
6
7 struct Root {
8     jsref: JSRef
9 }
10
11 impl Deref for Root {
12     type Target = JSRef;
13
14     fn deref<'a>(&'a self) -> &'a JSRef {
15         &self.jsref
16     }
17 }
18
19 #[derive(Copy, Clone)]
20 struct JSRef {
21     node: *const Node
22 }
23
24 impl Deref for JSRef {
25     type Target = Node;
26
27     fn deref<'a>(&'a self) -> &'a Node {
28         self.get()
29     }
30 }
31
32 trait INode {
33     fn RemoveChild(&self);
34 }
35
36 impl INode for JSRef {
37     fn RemoveChild(&self) {
38         self.get().RemoveChild(0)
39     }
40 }
41
42 impl JSRef {
43     fn AddChild(&self) {
44         self.get().AddChild(0);
45     }
46
47     fn get<'a>(&'a self) -> &'a Node {
48         unsafe {
49             &*self.node
50         }
51     }
52 }
53
54 struct Node;
55
56 impl Node {
57     fn RemoveChild(&self, _a: usize) {
58     }
59
60     fn AddChild(&self, _a: usize) {
61     }
62 }
63
64 fn main() {
65     let n = Node;
66     let jsref = JSRef { node: &n };
67     let root = Root { jsref: jsref };
68
69     root.AddChild();
70     jsref.AddChild();
71
72     root.RemoveChild();
73     jsref.RemoveChild();
74 }