Skip to content

Commit 7725ee5

Browse files
committed
Only trigger shims for Clone
1 parent 6a1d146 commit 7725ee5

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/librustc/traits/select.rs

+11-4
Original file line numberDiff line numberDiff line change
@@ -2129,10 +2129,17 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
21292129
ty::TyAdt(adt, substs) => {
21302130
let attrs = self.tcx().get_attrs(adt.did);
21312131
if adt.is_enum() && attrs.iter().any(|a| a.check_name("rustc_nocopy_clone_marker")) {
2132-
// for Clone
2133-
let mut iter = substs.types()
2134-
.chain(adt.all_fields().map(|f| f.ty(self.tcx(), substs)));
2135-
Where(ty::Binder(iter.collect()))
2132+
let trait_id = obligation.predicate.def_id();
2133+
if Some(trait_id) == self.tcx().lang_items().clone_trait() {
2134+
// for Clone
2135+
// this doesn't work for recursive types (FIXME(Manishearth))
2136+
// let mut iter = substs.types()
2137+
// .chain(adt.all_fields().map(|f| f.ty(self.tcx(), substs)));
2138+
let mut iter = substs.types();
2139+
Where(ty::Binder(iter.collect()))
2140+
} else {
2141+
None
2142+
}
21362143
} else {
21372144
// Fallback to whatever user-defined impls exist in this case.
21382145
None

0 commit comments

Comments
 (0)