diff options
| author | Donough Liu <ldm2993593805@163.com> | 2020-06-20 20:00:36 +0800 |
|---|---|---|
| committer | Donough Liu <ldm2993593805@163.com> | 2020-06-20 20:00:36 +0800 |
| commit | f1e07103d3ebac4e820311254e077481d00bed49 (patch) | |
| tree | e1adf3654582399a0d913fdd1dc9488f0c060773 /src/test | |
| parent | ef68bf3929e5073e84b48fd76a689b071842d756 (diff) | |
| download | rust-f1e07103d3ebac4e820311254e077481d00bed49.tar.gz rust-f1e07103d3ebac4e820311254e077481d00bed49.zip | |
Prevent incorrect help message for dereference suggestion
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/traits/trait-suggest-deferences-multiple-0.fixed (renamed from src/test/ui/traits/trait-suggest-deferences-multiple.fixed) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/trait-suggest-deferences-multiple-0.rs (renamed from src/test/ui/traits/trait-suggest-deferences-multiple.rs) | 0 | ||||
| -rw-r--r-- | src/test/ui/traits/trait-suggest-deferences-multiple-0.stderr (renamed from src/test/ui/traits/trait-suggest-deferences-multiple.stderr) | 2 | ||||
| -rw-r--r-- | src/test/ui/traits/trait-suggest-deferences-multiple-1.rs | 54 | ||||
| -rw-r--r-- | src/test/ui/traits/trait-suggest-deferences-multiple-1.stderr | 12 |
5 files changed, 67 insertions, 1 deletions
diff --git a/src/test/ui/traits/trait-suggest-deferences-multiple.fixed b/src/test/ui/traits/trait-suggest-deferences-multiple-0.fixed index b7160b75c60..b7160b75c60 100644 --- a/src/test/ui/traits/trait-suggest-deferences-multiple.fixed +++ b/src/test/ui/traits/trait-suggest-deferences-multiple-0.fixed diff --git a/src/test/ui/traits/trait-suggest-deferences-multiple.rs b/src/test/ui/traits/trait-suggest-deferences-multiple-0.rs index 9ac55177ffa..9ac55177ffa 100644 --- a/src/test/ui/traits/trait-suggest-deferences-multiple.rs +++ b/src/test/ui/traits/trait-suggest-deferences-multiple-0.rs diff --git a/src/test/ui/traits/trait-suggest-deferences-multiple.stderr b/src/test/ui/traits/trait-suggest-deferences-multiple-0.stderr index f9b8bba4b41..add34a553bc 100644 --- a/src/test/ui/traits/trait-suggest-deferences-multiple.stderr +++ b/src/test/ui/traits/trait-suggest-deferences-multiple-0.stderr @@ -1,5 +1,5 @@ error[E0277]: the trait bound `&Baz: Happy` is not satisfied - --> $DIR/trait-suggest-deferences-multiple.rs:34:9 + --> $DIR/trait-suggest-deferences-multiple-0.rs:34:9 | LL | fn foo<T>(_: T) where T: Happy {} | ----- required by this bound in `foo` diff --git a/src/test/ui/traits/trait-suggest-deferences-multiple-1.rs b/src/test/ui/traits/trait-suggest-deferences-multiple-1.rs new file mode 100644 index 00000000000..91c6c7924a4 --- /dev/null +++ b/src/test/ui/traits/trait-suggest-deferences-multiple-1.rs @@ -0,0 +1,54 @@ +use std::ops::{Deref, DerefMut}; + +trait Happy {} +struct LDM; +impl Happy for &mut LDM {} + +struct Foo(LDM); +struct Bar(Foo); +struct Baz(Bar); +impl Deref for Foo { + type Target = LDM; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl Deref for Bar { + type Target = Foo; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl Deref for Baz { + type Target = Bar; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for Foo { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} +impl DerefMut for Bar { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} +impl DerefMut for Baz { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + + +fn foo<T>(_: T) where T: Happy {} + +fn main() { + // Currently the compiler doesn't try to suggest dereferences for situations + // where DerefMut involves. So this test is meant to ensure compiler doesn't + // generate incorrect help message. + let mut baz = Baz(Bar(Foo(LDM))); + foo(&mut baz); + //~^ ERROR the trait bound `&mut Baz: Happy` is not satisfied +} diff --git a/src/test/ui/traits/trait-suggest-deferences-multiple-1.stderr b/src/test/ui/traits/trait-suggest-deferences-multiple-1.stderr new file mode 100644 index 00000000000..e90278fa16f --- /dev/null +++ b/src/test/ui/traits/trait-suggest-deferences-multiple-1.stderr @@ -0,0 +1,12 @@ +error[E0277]: the trait bound `&mut Baz: Happy` is not satisfied + --> $DIR/trait-suggest-deferences-multiple-1.rs:52:9 + | +LL | fn foo<T>(_: T) where T: Happy {} + | ----- required by this bound in `foo` +... +LL | foo(&mut baz); + | ^^^^^^^^ the trait `Happy` is not implemented for `&mut Baz` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. |
