summaryrefslogtreecommitdiffstats
path: root/src/test/ui/issues/issue-13264.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/issues/issue-13264.rs')
-rw-r--r--src/test/ui/issues/issue-13264.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-13264.rs b/src/test/ui/issues/issue-13264.rs
new file mode 100644
index 000000000..691bb63a2
--- /dev/null
+++ b/src/test/ui/issues/issue-13264.rs
@@ -0,0 +1,74 @@
+// run-pass
+#![allow(non_camel_case_types)]
+#![allow(non_snake_case)]
+
+use std::ops::Deref;
+
+struct Root {
+ jsref: JSRef
+}
+
+impl Deref for Root {
+ type Target = JSRef;
+
+ fn deref<'a>(&'a self) -> &'a JSRef {
+ &self.jsref
+ }
+}
+
+#[derive(Copy, Clone)]
+struct JSRef {
+ node: *const Node
+}
+
+impl Deref for JSRef {
+ type Target = Node;
+
+ fn deref<'a>(&'a self) -> &'a Node {
+ self.get()
+ }
+}
+
+trait INode {
+ fn RemoveChild(&self);
+}
+
+impl INode for JSRef {
+ fn RemoveChild(&self) {
+ self.get().RemoveChild(0)
+ }
+}
+
+impl JSRef {
+ fn AddChild(&self) {
+ self.get().AddChild(0);
+ }
+
+ fn get<'a>(&'a self) -> &'a Node {
+ unsafe {
+ &*self.node
+ }
+ }
+}
+
+struct Node;
+
+impl Node {
+ fn RemoveChild(&self, _a: usize) {
+ }
+
+ fn AddChild(&self, _a: usize) {
+ }
+}
+
+fn main() {
+ let n = Node;
+ let jsref = JSRef { node: &n };
+ let root = Root { jsref: jsref };
+
+ root.AddChild();
+ jsref.AddChild();
+
+ root.RemoveChild();
+ jsref.RemoveChild();
+}