summaryrefslogtreecommitdiffstats
path: root/src/test/ui/issues/issue-13264.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/issues/issue-13264.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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();
+}