diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-06-14 11:44:20 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-06-14 11:44:20 -0700 |
| commit | 34c4117f5f28c8eb8dd61600df1611fd29c8b66e (patch) | |
| tree | 1e609c95d4d341b728362baf025c657af37f10b3 | |
| parent | ae8d6a82feb184d73a43149fccdeb6aca5b6c14a (diff) | |
| download | rust-34c4117f5f28c8eb8dd61600df1611fd29c8b66e.tar.gz rust-34c4117f5f28c8eb8dd61600df1611fd29c8b66e.zip | |
review comment: do not rely on path str to identify std::clone::Clone
| -rw-r--r-- | src/librustc_typeck/check/demand.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index 30411225519..2d7ee2a73f6 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -380,12 +380,16 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { }; if self.can_coerce(ref_ty, expected) { let mut sugg_sp = sp; - if let hir::ExprKind::MethodCall(_segment, _sp, args) = &expr.node { - let clone_path = "std::clone::Clone::clone"; - if let ([arg], Some(true)) = (&args[..], self.tables.borrow() - .type_dependent_def_id(expr.hir_id) - .map(|did| self.tcx.def_path_str(did).as_str() == clone_path)) - { + if let hir::ExprKind::MethodCall(segment, _sp, args) = &expr.node { + let clone_trait = self.tcx.lang_items().clone_trait().unwrap(); + if let ([arg], Some(true), "clone") = ( + &args[..], + self.tables.borrow().type_dependent_def_id(expr.hir_id).map(|did| { + let ai = self.tcx.associated_item(did); + ai.container == ty::TraitContainer(clone_trait) + }), + &segment.ident.as_str()[..], + ) { // If this expression had a clone call when suggesting borrowing // we want to suggest removing it because it'd now be unecessary. sugg_sp = arg.span; |
