@@ -11,7 +11,7 @@ use rustc_infer::infer::free_regions::FreeRegionRelations;
11
11
use rustc_infer:: infer:: type_variable:: { TypeVariableOrigin , TypeVariableOriginKind } ;
12
12
use rustc_infer:: infer:: { self , InferCtxt , InferOk } ;
13
13
use 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 } ;
15
15
use rustc_middle:: ty:: { self , OpaqueTypeKey , Ty , TyCtxt } ;
16
16
use rustc_span:: Span ;
17
17
@@ -1007,7 +1007,9 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
1007
1007
) ,
1008
1008
} ;
1009
1009
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) ;
1011
1013
}
1012
1014
1013
1015
debug ! (
@@ -1029,23 +1031,18 @@ impl<'a, 'tcx> Instantiator<'a, 'tcx> {
1029
1031
fn fold_opaque_ty (
1030
1032
& mut self ,
1031
1033
ty : Ty < ' tcx > ,
1032
- def_id : DefId ,
1033
- substs : SubstsRef < ' tcx > ,
1034
+ opaque_type_key : OpaqueTypeKey < ' tcx > ,
1034
1035
origin : hir:: OpaqueTyOrigin ,
1035
1036
) -> Ty < ' tcx > {
1036
1037
let infcx = self . infcx ;
1037
1038
let tcx = infcx. tcx ;
1039
+ let OpaqueTypeKey { def_id, substs } = opaque_type_key;
1038
1040
1039
1041
debug ! ( "instantiate_opaque_types: Opaque(def_id={:?}, substs={:?})" , def_id, substs) ;
1040
1042
1041
1043
// Use the same type variable if the exact same opaque type appears more
1042
1044
// 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) {
1049
1046
debug ! ( "instantiate_opaque_types: returning concrete ty {:?}" , opaque_defn. concrete_ty) ;
1050
1047
return opaque_defn. concrete_ty ;
1051
1048
}
0 commit comments