diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2024-03-17 21:25:38 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2024-04-11 16:41:42 +0000 |
| commit | d97d2fe7440ea3032a93fa3ebf8d62fea0337d04 (patch) | |
| tree | 84f778762a45c6c7820a0dcdd557292424e9d926 /compiler | |
| parent | d578ac9e476a376246320db1d934972601c5b0f5 (diff) | |
| download | rust-d97d2fe7440ea3032a93fa3ebf8d62fea0337d04.tar.gz rust-d97d2fe7440ea3032a93fa3ebf8d62fea0337d04.zip | |
Mention when the type of the moved value doesn't implement `Clone`
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs index ee50e82d80d..860f8882ad3 100644 --- a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs +++ b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs @@ -1195,8 +1195,19 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> { let ty = ty.peel_refs(); if self.implements_clone(ty) { self.suggest_cloning_inner(err, ty, expr); - // } else { - // err.note(format!("if `{ty}` implemented `Clone`, you could clone the value")); + } else if let ty::Adt(def, args) = ty.kind() + && def.did().as_local().is_some() + && def.variants().iter().all(|variant| { + variant + .fields + .iter() + .all(|field| self.implements_clone(field.ty(self.infcx.tcx, args))) + }) + { + err.span_note( + self.infcx.tcx.def_span(def.did()), + format!("if `{ty}` implemented `Clone`, you could clone the value"), + ); } } |
