about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEsteban Kuber <esteban@kuber.com.ar>2021-10-13 16:07:22 +0000
committerEsteban Kuber <esteban@kuber.com.ar>2021-11-20 19:19:34 +0000
commitcecbd7657a80a824bdcf60fb43acc7af000ac2c1 (patch)
tree5bf2d8aff434a406360d36494e14e8faea8673b9 /src
parent9fa165d11b5eeedcf6e04f4812704d7fccf60ed6 (diff)
Suggest constraining `fn` type params when appropriate
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/issues/issue-35677.fixed11
-rw-r--r--src/test/ui/issues/issue-35677.rs3
-rw-r--r--src/test/ui/issues/issue-35677.stderr6
-rw-r--r--src/test/ui/issues/issue-69725.fixed13
-rw-r--r--src/test/ui/issues/issue-69725.rs2
-rw-r--r--src/test/ui/issues/issue-69725.stderr6
6 files changed, 39 insertions, 2 deletions
diff --git a/src/test/ui/issues/issue-35677.fixed b/src/test/ui/issues/issue-35677.fixed
new file mode 100644
index 00000000000..08174d8d8d5
--- /dev/null
+++ b/src/test/ui/issues/issue-35677.fixed
@@ -0,0 +1,11 @@
+// run-rustfix
+#![allow(dead_code)]
+use std::collections::HashSet;
+use std::hash::Hash;
+
+fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool where T: Eq, T: Hash {
+    this.is_subset(other)
+    //~^ ERROR the method
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-35677.rs b/src/test/ui/issues/issue-35677.rs
index 15d13979062..2cb394386b8 100644
--- a/src/test/ui/issues/issue-35677.rs
+++ b/src/test/ui/issues/issue-35677.rs
@@ -1,4 +1,7 @@
+// run-rustfix
+#![allow(dead_code)]
 use std::collections::HashSet;
+use std::hash::Hash;
 
 fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool {
     this.is_subset(other)
diff --git a/src/test/ui/issues/issue-35677.stderr b/src/test/ui/issues/issue-35677.stderr
index ab59e5d1acf..a2201b946a6 100644
--- a/src/test/ui/issues/issue-35677.stderr
+++ b/src/test/ui/issues/issue-35677.stderr
@@ -1,5 +1,5 @@
 error[E0599]: the method `is_subset` exists for reference `&HashSet<T>`, but its trait bounds were not satisfied
-  --> $DIR/issue-35677.rs:4:10
+  --> $DIR/issue-35677.rs:7:10
    |
 LL |     this.is_subset(other)
    |          ^^^^^^^^^ method cannot be called on `&HashSet<T>` due to unsatisfied trait bounds
@@ -7,6 +7,10 @@ LL |     this.is_subset(other)
    = note: the following trait bounds were not satisfied:
            `T: Eq`
            `T: Hash`
+help: consider restricting the type parameters to satisfy the trait bounds
+   |
+LL | fn is_subset<T>(this: &HashSet<T>, other: &HashSet<T>) -> bool where T: Eq, T: Hash {
+   |                                                                ++++++++++++++++++++
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/issues/issue-69725.fixed b/src/test/ui/issues/issue-69725.fixed
new file mode 100644
index 00000000000..d57badcfd8c
--- /dev/null
+++ b/src/test/ui/issues/issue-69725.fixed
@@ -0,0 +1,13 @@
+// run-rustfix
+// aux-build:issue-69725.rs
+#![allow(dead_code)]
+
+extern crate issue_69725;
+use issue_69725::Struct;
+
+fn crash<A>() where A: Clone {
+    let _ = Struct::<A>::new().clone();
+    //~^ ERROR: the method
+}
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-69725.rs b/src/test/ui/issues/issue-69725.rs
index 7c77293945e..9c88969c5cf 100644
--- a/src/test/ui/issues/issue-69725.rs
+++ b/src/test/ui/issues/issue-69725.rs
@@ -1,4 +1,6 @@
+// run-rustfix
 // aux-build:issue-69725.rs
+#![allow(dead_code)]
 
 extern crate issue_69725;
 use issue_69725::Struct;
diff --git a/src/test/ui/issues/issue-69725.stderr b/src/test/ui/issues/issue-69725.stderr
index b1ba89f6cbe..6395bca300c 100644
--- a/src/test/ui/issues/issue-69725.stderr
+++ b/src/test/ui/issues/issue-69725.stderr
@@ -1,5 +1,5 @@
 error[E0599]: the method `clone` exists for struct `Struct<A>`, but its trait bounds were not satisfied
-  --> $DIR/issue-69725.rs:7:32
+  --> $DIR/issue-69725.rs:9:32
    |
 LL |     let _ = Struct::<A>::new().clone();
    |                                ^^^^^ method cannot be called on `Struct<A>` due to unsatisfied trait bounds
@@ -12,6 +12,10 @@ LL | pub struct Struct<A>(A);
    = note: the following trait bounds were not satisfied:
            `A: Clone`
            which is required by `Struct<A>: Clone`
+help: consider restricting the type parameter to satisfy the trait bound
+   |
+LL | fn crash<A>() where A: Clone {
+   |               ++++++++++++++
 
 error: aborting due to previous error