File tree Expand file tree Collapse file tree 1 file changed +11
-0
lines changed
src/libsyntax/ext/deriving/generic Expand file tree Collapse file tree 1 file changed +11
-0
lines changed Original file line number Diff line number Diff line change @@ -188,6 +188,7 @@ pub use self::SubstructureFields::*;
188188use self :: StructType :: * ;
189189
190190use std:: cell:: RefCell ;
191+ use std:: collections:: HashSet ;
191192use std:: vec;
192193
193194use abi:: Abi ;
@@ -549,10 +550,20 @@ impl<'a> TraitDef<'a> {
549550 . map ( |ty_param| ty_param. ident . name )
550551 . collect ( ) ;
551552
553+ let mut processed_field_types = HashSet :: new ( ) ;
552554 for field_ty in field_tys {
553555 let tys = find_type_parameters ( & * field_ty, & ty_param_names) ;
554556
555557 for ty in tys {
558+ // if we have already handled this type, skip it
559+ if let ast:: TyPath ( _, ref p) = ty. node {
560+ if p. segments . len ( ) == 1
561+ && ty_param_names. contains ( & p. segments [ 0 ] . identifier . name )
562+ || processed_field_types. contains ( & p. segments ) {
563+ continue ;
564+ } ;
565+ processed_field_types. insert ( p. segments . clone ( ) ) ;
566+ }
556567 let mut bounds: Vec < _ > = self . additional_bounds . iter ( ) . map ( |p| {
557568 cx. typarambound ( p. to_path ( cx, self . span , type_ident, generics) )
558569 } ) . collect ( ) ;
You can’t perform that action at this time.
0 commit comments