From bdb05a84f3b9d0c7d39d2bbbe92d2695d33d79fc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Esteban=20K=C3=BCber?= Date: Fri, 24 May 2019 18:24:20 -0700 Subject: [PATCH] When suggesting to borrow, remove useless clones --- src/librustc_typeck/check/demand.rs | 3 +++ src/test/ui/issues/issue-61106.rs | 6 ++++++ src/test/ui/issues/issue-61106.stderr | 15 +++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/test/ui/issues/issue-61106.rs create mode 100644 src/test/ui/issues/issue-61106.stderr 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 @@ pub fn check_ref( } } } + // 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`. -- 2.44.0