@@ -460,8 +460,18 @@ CanType TypeJoin::visitProtocolType(CanType second) {
460
460
auto *secondDecl =
461
461
cast<ProtocolDecl>(second->getNominalOrBoundGenericNominal ());
462
462
463
- if (firstDecl->getInheritedProtocols ().empty () &&
464
- secondDecl->getInheritedProtocols ().empty ())
463
+ SmallVector<Type, 4 > firstMembers;
464
+ for (auto *decl : firstDecl->getInheritedProtocols ())
465
+ if (!decl->getInvertibleProtocolKind ())
466
+ firstMembers.push_back (decl->getDeclaredInterfaceType ());
467
+
468
+ SmallVector<Type, 4 > secondMembers;
469
+ for (auto *decl : secondDecl->getInheritedProtocols ())
470
+ if (!decl->getInvertibleProtocolKind ())
471
+ secondMembers.push_back (decl->getDeclaredInterfaceType ());
472
+
473
+ if (firstMembers.empty () &&
474
+ secondMembers.empty ())
465
475
return TheAnyType;
466
476
467
477
if (firstDecl->inheritsFrom (secondDecl))
@@ -473,14 +483,6 @@ CanType TypeJoin::visitProtocolType(CanType second) {
473
483
// One isn't the supertype of the other, so instead, treat each as
474
484
// if it's a protocol composition of its inherited members, and join
475
485
// those.
476
- SmallVector<Type, 4 > firstMembers;
477
- for (auto *decl : firstDecl->getInheritedProtocols ())
478
- firstMembers.push_back (decl->getDeclaredInterfaceType ());
479
-
480
- SmallVector<Type, 4 > secondMembers;
481
- for (auto *decl : secondDecl->getInheritedProtocols ())
482
- secondMembers.push_back (decl->getDeclaredInterfaceType ());
483
-
484
486
return computeProtocolCompositionJoin (firstMembers, secondMembers);
485
487
}
486
488
0 commit comments