about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorDonough Liu <ldm2993593805@163.com>2020-06-20 20:00:36 +0800
committerDonough Liu <ldm2993593805@163.com>2020-06-20 20:00:36 +0800
commitf1e07103d3ebac4e820311254e077481d00bed49 (patch)
treee1adf3654582399a0d913fdd1dc9488f0c060773 /src/test
parentef68bf3929e5073e84b48fd76a689b071842d756 (diff)
downloadrust-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.rs54
-rw-r--r--src/test/ui/traits/trait-suggest-deferences-multiple-1.stderr12
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`.