@@ -3865,6 +3865,23 @@ ConstraintSystem::matchDeepEqualityTypes(Type type1, Type type2,
38653865 return result;
38663866 }
38673867
3868+ // Handle opened archetype types.
3869+ if (auto opened1 = type1->getAs<OpenedArchetypeType>()) {
3870+ auto opened2 = type2->castTo<OpenedArchetypeType>();
3871+ assert(opened1->getInterfaceType()->isEqual(opened2->getInterfaceType()) &&
3872+ opened1->getGenericEnvironment()->getOpenedExistentialUUID() ==
3873+ opened2->getGenericEnvironment()->getOpenedExistentialUUID());
3874+
3875+ auto args1 = opened1->getGenericEnvironment()
3876+ ->getOuterSubstitutions()
3877+ .getReplacementTypes();
3878+ auto args2 = opened2->getGenericEnvironment()
3879+ ->getOuterSubstitutions()
3880+ .getReplacementTypes();
3881+
3882+ return matchDeepTypeArguments(*this, subflags, args1, args2, locator);
3883+ }
3884+
38683885 // `any Sendable` -> `Any`
38693886 if (matchSendableExistentialToAnyInGenericArgumentPosition(*this, type1,
38703887 type2, locator))
@@ -7332,7 +7349,6 @@ ConstraintSystem::matchTypes(Type type1, Type type2, ConstraintKind kind,
73327349
73337350 case TypeKind::Module:
73347351 case TypeKind::PrimaryArchetype:
7335- case TypeKind::OpenedArchetype:
73367352 case TypeKind::PackArchetype:
73377353 case TypeKind::ElementArchetype: {
73387354 // Give `repairFailures` a chance to fix the problem.
@@ -7657,7 +7673,20 @@ ConstraintSystem::matchTypes(Type type1, Type type2, ConstraintKind kind,
76577673 }
76587674 break;
76597675 }
7660-
7676+
7677+ case TypeKind::OpenedArchetype: {
7678+ auto opened1 = cast<OpenedArchetypeType>(desugar1);
7679+ auto opened2 = cast<OpenedArchetypeType>(desugar2);
7680+ // If they have the same interface type and UUID, two OpenedArchetypeTypes
7681+ // match if their generic arguments do as well.
7682+ if (opened1->getInterfaceType()->isEqual(opened2->getInterfaceType()) &&
7683+ opened1->getGenericEnvironment()->getOpenedExistentialUUID() ==
7684+ opened2->getGenericEnvironment()->getOpenedExistentialUUID()) {
7685+ conversionsOrFixes.push_back(ConversionRestrictionKind::DeepEquality);
7686+ }
7687+ break;
7688+ }
7689+
76617690 case TypeKind::Pack: {
76627691 auto tmpPackLoc = locator.withPathElement(LocatorPathElt::PackType(type1));
76637692 auto packLoc = tmpPackLoc.withPathElement(LocatorPathElt::PackType(type2));
0 commit comments