]> git.proxmox.com Git - rustc.git/blob - tests/ui/issues/issue-13264.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / tests / 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 }