@@ -11,7 +11,7 @@ use rustc_infer::infer::free_regions::FreeRegionRelations;
1111use rustc_infer:: infer:: type_variable:: { TypeVariableOrigin , TypeVariableOriginKind } ;
1212use rustc_infer:: infer:: { self , InferCtxt , InferOk } ;
1313use rustc_middle:: ty:: fold:: { BottomUpFolder , TypeFoldable , TypeFolder , TypeVisitor } ;
14- use rustc_middle:: ty:: subst:: { GenericArg , GenericArgKind , InternalSubsts , Subst , SubstsRef } ;
14+ use rustc_middle:: ty:: subst:: { GenericArg , GenericArgKind , InternalSubsts , Subst } ;
1515use rustc_middle:: ty:: { self , OpaqueTypeKey , Ty , TyCtxt } ;
1616use rustc_span:: Span ;
1717
@@ -1007,7 +1007,9 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
10071007 ) ,
10081008 } ;
10091009 if in_definition_scope {
1010- return self . fold_opaque_ty ( ty, def_id. to_def_id ( ) , substs, origin) ;
1010+ let opaque_type_key =
1011+ OpaqueTypeKey { def_id : def_id. to_def_id ( ) , substs } ;
1012+ return self . fold_opaque_ty ( ty, opaque_type_key, origin) ;
10111013 }
10121014
10131015 debug ! (
@@ -1029,23 +1031,18 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
10291031 fn fold_opaque_ty (
10301032 & mut self ,
10311033 ty : Ty < ' tcx > ,
1032- def_id : DefId ,
1033- substs : SubstsRef < ' tcx > ,
1034+ opaque_type_key : OpaqueTypeKey < ' tcx > ,
10341035 origin : hir:: OpaqueTyOrigin ,
10351036 ) -> Ty < ' tcx > {
10361037 let infcx = self . infcx ;
10371038 let tcx = infcx. tcx ;
1039+ let OpaqueTypeKey { def_id, substs } = opaque_type_key;
10381040
10391041 debug ! ( "instantiate_opaque_types: Opaque(def_id={:?}, substs={:?})" , def_id, substs) ;
10401042
10411043 // Use the same type variable if the exact same opaque type appears more
10421044 // than once in the return type (e.g., if it's passed to a type alias).
1043- if let Some ( opaque_defn) = self
1044- . opaque_types
1045- . iter ( )
1046- . find ( |( opaque_type_key, _) | opaque_type_key. def_id == def_id)
1047- . map ( |( _, opaque_defn) | opaque_defn)
1048- {
1045+ if let Some ( opaque_defn) = self . opaque_types . get ( & opaque_type_key) {
10491046 debug ! ( "instantiate_opaque_types: returning concrete ty {:?}" , opaque_defn. concrete_ty) ;
10501047 return opaque_defn. concrete_ty ;
10511048 }
0 commit comments