summary refs log tree commit diff
path: root/tests/ui/deref-patterns
diff options
context:
space:
mode:
authorCaio <c410.f3r@gmail.com>2024-04-21 15:43:43 -0300
committerCaio <c410.f3r@gmail.com>2024-04-21 15:43:43 -0300
commit3aaa3941fd62fb4aeea559eafe8a6aa6472eb87d (patch)
tree370d74ef8239f923cae41848afd9e71648850de3 /tests/ui/deref-patterns
parentfecb7b43093e4fa59e2d366e88bf0085ce350f29 (diff)
downloadrust-3aaa3941fd62fb4aeea559eafe8a6aa6472eb87d.tar.gz
rust-3aaa3941fd62fb4aeea559eafe8a6aa6472eb87d.zip
Move some tests
Diffstat (limited to 'tests/ui/deref-patterns')
-rw-r--r--tests/ui/deref-patterns/issue-71676-1.fixed53
-rw-r--r--tests/ui/deref-patterns/issue-71676-1.rs53
-rw-r--r--tests/ui/deref-patterns/issue-71676-1.stderr63
-rw-r--r--tests/ui/deref-patterns/issue-71676-2.rs42
-rw-r--r--tests/ui/deref-patterns/issue-71676-2.stderr18
5 files changed, 229 insertions, 0 deletions
diff --git a/tests/ui/deref-patterns/issue-71676-1.fixed b/tests/ui/deref-patterns/issue-71676-1.fixed
new file mode 100644
index 00000000000..8b473de4ac2
--- /dev/null
+++ b/tests/ui/deref-patterns/issue-71676-1.fixed
@@ -0,0 +1,53 @@
+//@ run-rustfix
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+    type Target = u8;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Foo {
+    type Target = Bar;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Emm {
+    type Target = Foo;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl DerefMut for Bar{
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Foo {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Emm {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+fn main() {
+    // Suggest dereference with arbitrary mutability
+    let a = Emm(Foo(Bar(0)));
+    let _: *const u8 = &***a; //~ ERROR mismatched types
+
+    let mut a = Emm(Foo(Bar(0)));
+    let _: *mut u8 = &mut ***a; //~ ERROR mismatched types
+
+    let a = Emm(Foo(Bar(0)));
+    let _: *const u8 = &***a; //~ ERROR mismatched types
+
+    let mut a = Emm(Foo(Bar(0)));
+    let _: *mut u8 = &mut ***a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/deref-patterns/issue-71676-1.rs b/tests/ui/deref-patterns/issue-71676-1.rs
new file mode 100644
index 00000000000..38d23fb8428
--- /dev/null
+++ b/tests/ui/deref-patterns/issue-71676-1.rs
@@ -0,0 +1,53 @@
+//@ run-rustfix
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+    type Target = u8;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Foo {
+    type Target = Bar;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Emm {
+    type Target = Foo;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl DerefMut for Bar{
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Foo {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Emm {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+fn main() {
+    // Suggest dereference with arbitrary mutability
+    let a = Emm(Foo(Bar(0)));
+    let _: *const u8 = &a; //~ ERROR mismatched types
+
+    let mut a = Emm(Foo(Bar(0)));
+    let _: *mut u8 = &a; //~ ERROR mismatched types
+
+    let a = Emm(Foo(Bar(0)));
+    let _: *const u8 = &mut a; //~ ERROR mismatched types
+
+    let mut a = Emm(Foo(Bar(0)));
+    let _: *mut u8 = &mut a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/deref-patterns/issue-71676-1.stderr b/tests/ui/deref-patterns/issue-71676-1.stderr
new file mode 100644
index 00000000000..164641ff775
--- /dev/null
+++ b/tests/ui/deref-patterns/issue-71676-1.stderr
@@ -0,0 +1,63 @@
+error[E0308]: mismatched types
+  --> $DIR/issue-71676-1.rs:43:24
+   |
+LL |     let _: *const u8 = &a;
+   |            ---------   ^^ expected `*const u8`, found `&Emm`
+   |            |
+   |            expected due to this
+   |
+   = note: expected raw pointer `*const u8`
+                found reference `&Emm`
+help: consider dereferencing
+   |
+LL |     let _: *const u8 = &***a;
+   |                         +++
+
+error[E0308]: mismatched types
+  --> $DIR/issue-71676-1.rs:46:22
+   |
+LL |     let _: *mut u8 = &a;
+   |            -------   ^^ types differ in mutability
+   |            |
+   |            expected due to this
+   |
+   = note: expected raw pointer `*mut u8`
+                found reference `&Emm`
+help: consider dereferencing
+   |
+LL |     let _: *mut u8 = &mut ***a;
+   |                       +++++++
+
+error[E0308]: mismatched types
+  --> $DIR/issue-71676-1.rs:49:24
+   |
+LL |     let _: *const u8 = &mut a;
+   |            ---------   ^^^^^^ expected `*const u8`, found `&mut Emm`
+   |            |
+   |            expected due to this
+   |
+   = note:    expected raw pointer `*const u8`
+           found mutable reference `&mut Emm`
+help: consider dereferencing
+   |
+LL |     let _: *const u8 = &***a;
+   |                         ~~~
+
+error[E0308]: mismatched types
+  --> $DIR/issue-71676-1.rs:52:22
+   |
+LL |     let _: *mut u8 = &mut a;
+   |            -------   ^^^^^^ expected `*mut u8`, found `&mut Emm`
+   |            |
+   |            expected due to this
+   |
+   = note:    expected raw pointer `*mut u8`
+           found mutable reference `&mut Emm`
+help: consider dereferencing
+   |
+LL |     let _: *mut u8 = &mut ***a;
+   |                           +++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/deref-patterns/issue-71676-2.rs b/tests/ui/deref-patterns/issue-71676-2.rs
new file mode 100644
index 00000000000..f3183899dc5
--- /dev/null
+++ b/tests/ui/deref-patterns/issue-71676-2.rs
@@ -0,0 +1,42 @@
+use std::ops::Deref;
+use std::ops::DerefMut;
+struct Bar(u8);
+struct Foo(Bar);
+struct Emm(Foo);
+impl Deref for Bar{
+    type Target = u8;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Foo {
+    type Target = Bar;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl Deref for Emm {
+    type Target = Foo;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl DerefMut for Bar{
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Foo {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+impl DerefMut for Emm {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.0
+    }
+}
+fn main() {
+    let a = Emm(Foo(Bar(0)));
+    let _: *mut u8 = &a; //~ ERROR mismatched types
+}
diff --git a/tests/ui/deref-patterns/issue-71676-2.stderr b/tests/ui/deref-patterns/issue-71676-2.stderr
new file mode 100644
index 00000000000..6ed318c8768
--- /dev/null
+++ b/tests/ui/deref-patterns/issue-71676-2.stderr
@@ -0,0 +1,18 @@
+error[E0308]: mismatched types
+  --> $DIR/issue-71676-2.rs:41:22
+   |
+LL |     let _: *mut u8 = &a;
+   |            -------   ^^ types differ in mutability
+   |            |
+   |            expected due to this
+   |
+   = note: expected raw pointer `*mut u8`
+                found reference `&Emm`
+help: consider dereferencing
+   |
+LL |     let _: *mut u8 = &mut ***a;
+   |                       +++++++
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0308`.