diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-05-24 18:24:20 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-06-13 16:46:07 -0700 |
| commit | bdb05a84f3b9d0c7d39d2bbbe92d2695d33d79fc (patch) | |
| tree | e176a53eb20b178b7045b209a824c24bc909f789 | |
| parent | 0e4a56b4b04ea98bb16caada30cb2418dd06e250 (diff) | |
| download | rust-bdb05a84f3b9d0c7d39d2bbbe92d2695d33d79fc.tar.gz rust-bdb05a84f3b9d0c7d39d2bbbe92d2695d33d79fc.zip | |
When suggesting to borrow, remove useless clones
| -rw-r--r-- | src/librustc_typeck/check/demand.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-61106.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-61106.stderr | 15 |
3 files changed, 24 insertions, 0 deletions
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index 87fc90f53ab..bc36162e02f 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -425,6 +425,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { } } } + // If this expression had a clone call, when suggesting borrowing, we + // want to suggest removing it + let sugg_expr = sugg_expr.trim_end_matches(".clone()"); return Some(match mutability { hir::Mutability::MutMutable => ( sp, diff --git a/src/test/ui/issues/issue-61106.rs b/src/test/ui/issues/issue-61106.rs new file mode 100644 index 00000000000..308ef1de3cc --- /dev/null +++ b/src/test/ui/issues/issue-61106.rs @@ -0,0 +1,6 @@ +fn main() { + let x = String::new(); + foo(x.clone()); //~ ERROR mismatched types +} + +fn foo(_: &str) {} diff --git a/src/test/ui/issues/issue-61106.stderr b/src/test/ui/issues/issue-61106.stderr new file mode 100644 index 00000000000..ca67d514928 --- /dev/null +++ b/src/test/ui/issues/issue-61106.stderr @@ -0,0 +1,15 @@ +error[E0308]: mismatched types + --> $DIR/issue-61106.rs:3:9 + | +LL | foo(x.clone()); + | ^^^^^^^^^ + | | + | expected &str, found struct `std::string::String` + | help: consider borrowing here: `&x` + | + = note: expected type `&str` + found type `std::string::String` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`. |
