about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-06-14 11:44:20 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-06-14 11:44:20 -0700
commit34c4117f5f28c8eb8dd61600df1611fd29c8b66e (patch)
tree1e609c95d4d341b728362baf025c657af37f10b3
parentae8d6a82feb184d73a43149fccdeb6aca5b6c14a (diff)
downloadrust-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.rs16
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;