From 065454dd1da7a759cd414468992b2afdfcf477b3 Mon Sep 17 00:00:00 2001 From: Esteban Küber Date: Wed, 13 Mar 2024 05:26:03 +0000 Subject: More move error suggestions to clone ``` error[E0507]: cannot move out of `val`, a captured variable in an `FnMut` closure --> $DIR/issue-87456-point-to-closure.rs:10:28 | LL | let val = String::new(); | --- captured outer variable LL | LL | take_mut(|| { | -- captured by this `FnMut` closure LL | LL | let _foo: String = val; | ^^^ move occurs because `val` has type `String`, which does not implement the `Copy` trait | help: consider borrowing here | LL | let _foo: String = &val; | + help: consider cloning the value if the performance cost is acceptable | LL | let _foo: String = val.clone(); | ++++++++ ``` --- compiler/rustc_borrowck/src/diagnostics/move_errors.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'compiler') diff --git a/compiler/rustc_borrowck/src/diagnostics/move_errors.rs b/compiler/rustc_borrowck/src/diagnostics/move_errors.rs index 3a1fbab452e..17e43a5b39c 100644 --- a/compiler/rustc_borrowck/src/diagnostics/move_errors.rs +++ b/compiler/rustc_borrowck/src/diagnostics/move_errors.rs @@ -444,6 +444,10 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> { None => "value".to_string(), }; + if let Some(expr) = self.find_expr(span) { + self.suggest_cloning(err, place_ty, expr, span); + } + err.subdiagnostic( self.dcx(), crate::session_diagnostics::TypeNoCopy::Label { -- cgit 1.4.1-3-g733a5