diff options
| author | Caio <c410.f3r@gmail.com> | 2024-04-21 15:43:43 -0300 |
|---|---|---|
| committer | Caio <c410.f3r@gmail.com> | 2024-04-21 15:43:43 -0300 |
| commit | 3aaa3941fd62fb4aeea559eafe8a6aa6472eb87d (patch) | |
| tree | 370d74ef8239f923cae41848afd9e71648850de3 /tests/ui/deref-patterns | |
| parent | fecb7b43093e4fa59e2d366e88bf0085ce350f29 (diff) | |
| download | rust-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.fixed | 53 | ||||
| -rw-r--r-- | tests/ui/deref-patterns/issue-71676-1.rs | 53 | ||||
| -rw-r--r-- | tests/ui/deref-patterns/issue-71676-1.stderr | 63 | ||||
| -rw-r--r-- | tests/ui/deref-patterns/issue-71676-2.rs | 42 | ||||
| -rw-r--r-- | tests/ui/deref-patterns/issue-71676-2.stderr | 18 |
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`. |
