about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-07-25 23:21:13 +0200
committerGitHub <noreply@github.com>2019-07-25 23:21:13 +0200
commit1a775b3b55263a82c3e69a942de5d2cdfb374bf1 (patch)
tree4a262de0e961f4653af1cfa2c275f0a3adb75beb
parentf87f3db3a20173509977d726ad30454aa7b16522 (diff)
parent3ab60264b504c1f51b2a9e3dfa20ef0d03bcdaed (diff)
downloadrust-1a775b3b55263a82c3e69a942de5d2cdfb374bf1.tar.gz
rust-1a775b3b55263a82c3e69a942de5d2cdfb374bf1.zip
Rollup merge of #62981 - estebank:issue-62843, r=Centril
Add note suggesting to borrow a String argument to find

Fix #62843.
-rw-r--r--src/libcore/ops/function.rs4
-rw-r--r--src/test/ui/suggestions/issue-62843.rs5
-rw-r--r--src/test/ui/suggestions/issue-62843.stderr13
3 files changed, 22 insertions, 0 deletions
diff --git a/src/libcore/ops/function.rs b/src/libcore/ops/function.rs
index c69f5fd9896..b9552eaa1a0 100644
--- a/src/libcore/ops/function.rs
+++ b/src/libcore/ops/function.rs
@@ -137,6 +137,10 @@ pub trait Fn<Args> : FnMut<Args> {
 #[rustc_paren_sugar]
 #[rustc_on_unimplemented(
     on(Args="()", note="wrap the `{Self}` in a closure with no arguments: `|| {{ /* code */ }}"),
+    on(
+        all(Args="(char,)", _Self="std::string::String"),
+        note="borrowing the `{Self}` might fix the problem"
+    ),
     message="expected a `{FnMut}<{Args}>` closure, found `{Self}`",
     label="expected an `FnMut<{Args}>` closure, found `{Self}`",
 )]
diff --git a/src/test/ui/suggestions/issue-62843.rs b/src/test/ui/suggestions/issue-62843.rs
new file mode 100644
index 00000000000..d96b12fd15a
--- /dev/null
+++ b/src/test/ui/suggestions/issue-62843.rs
@@ -0,0 +1,5 @@
+fn main() {
+    let line = String::from("abc");
+    let pattern = String::from("bc");
+    println!("{:?}", line.find(pattern)); //~ ERROR E0277
+}
diff --git a/src/test/ui/suggestions/issue-62843.stderr b/src/test/ui/suggestions/issue-62843.stderr
new file mode 100644
index 00000000000..cc27b5b49b6
--- /dev/null
+++ b/src/test/ui/suggestions/issue-62843.stderr
@@ -0,0 +1,13 @@
+error[E0277]: expected a `std::ops::FnMut<(char,)>` closure, found `std::string::String`
+  --> $DIR/issue-62843.rs:4:27
+   |
+LL |     println!("{:?}", line.find(pattern));
+   |                           ^^^^ expected an `FnMut<(char,)>` closure, found `std::string::String`
+   |
+   = help: the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
+   = note: borrowing the `std::string::String` might fix the problem
+   = note: required because of the requirements on the impl of `std::str::pattern::Pattern<'_>` for `std::string::String`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.