@@ -1009,22 +1009,11 @@ Type ConstraintSystem::openOpaqueType(OpaqueTypeArchetypeType *opaque,
1009
1009
// underlying return type.
1010
1010
auto opaqueLocator = locator.withPathElement (
1011
1011
LocatorPathElt::OpenedOpaqueArchetype (opaqueDecl));
1012
+
1012
1013
OpenedTypeMap replacements;
1013
1014
openGeneric (DC, opaqueDecl->getOpaqueInterfaceGenericSignature (),
1014
1015
opaqueLocator, replacements);
1015
1016
1016
- // If there is an outer generic signature, bind the outer parameters based
1017
- // on the substitutions in the opaque type.
1018
- auto subs = opaque->getSubstitutions ();
1019
- if (auto genericSig = subs.getGenericSignature ()) {
1020
- for (auto *genericParamPtr : genericSig.getGenericParams ()) {
1021
- Type genericParam (genericParamPtr);
1022
- addConstraint (
1023
- ConstraintKind::Bind, openType (genericParam, replacements),
1024
- genericParam.subst (subs), opaqueLocator);
1025
- }
1026
- }
1027
-
1028
1017
recordOpenedTypes (opaqueLocatorKey, replacements);
1029
1018
1030
1019
return openType (opaque->getInterfaceType (), replacements);
@@ -1773,6 +1762,8 @@ static void bindArchetypesFromContext(
1773
1762
auto genericSig = parentDC->getGenericSignatureOfContext ();
1774
1763
for (auto *paramTy : genericSig.getGenericParams ()) {
1775
1764
Type contextTy = cs.DC ->mapTypeIntoContext (paramTy);
1765
+ if (paramTy->isParameterPack ())
1766
+ contextTy = PackType::getSingletonPackExpansion (contextTy);
1776
1767
bindPrimaryArchetype (paramTy, contextTy);
1777
1768
}
1778
1769
0 commit comments