@@ -628,9 +628,7 @@ static void lookupVisibleDynamicMemberLookupDecls(
628
628
LookupState LS, DeclVisibilityKind reason, LazyResolver *typeResolver,
629
629
GenericSignatureBuilder *GSB, VisitedSet &visited) {
630
630
631
- if (!hasDynamicMemberLookupAttribute (baseType))
632
- return ;
633
-
631
+ assert (hasDynamicMemberLookupAttribute (baseType));
634
632
auto &ctx = dc->getASTContext ();
635
633
636
634
// Lookup the `subscript(dynamicMember:)` methods in this type.
@@ -652,9 +650,12 @@ static void lookupVisibleDynamicMemberLookupDecls(
652
650
653
651
auto subs =
654
652
baseType->getMemberSubstitutionMap (dc->getParentModule (), subscript);
655
- if (auto memberType = rootType->subst (subs))
656
- lookupVisibleMemberDeclsImpl (memberType, consumer, dc, LS, reason,
657
- typeResolver, GSB, visited);
653
+ auto memberType = rootType->subst (subs);
654
+ if (!memberType || !memberType->mayHaveMembers ())
655
+ continue ;
656
+
657
+ lookupVisibleMemberDeclsImpl (memberType, consumer, dc, LS, reason,
658
+ typeResolver, GSB, visited);
658
659
}
659
660
}
660
661
@@ -888,13 +889,15 @@ static void lookupVisibleMemberDecls(
888
889
lookupVisibleMemberDeclsImpl (BaseTy, overrideConsumer, CurrDC, LS, Reason,
889
890
TypeResolver, GSB, Visited);
890
891
891
- llvm::DenseSet<DeclBaseName> knownMembers;
892
- for (auto &kv : overrideConsumer.FoundDecls ) {
893
- knownMembers.insert (kv.first );
892
+ if (hasDynamicMemberLookupAttribute (BaseTy)) {
893
+ llvm::DenseSet<DeclBaseName> knownMembers;
894
+ for (auto &kv : overrideConsumer.FoundDecls ) {
895
+ knownMembers.insert (kv.first );
896
+ }
897
+ ShadowedKeyPathMembers dynamicConsumer (overrideConsumer, knownMembers);
898
+ lookupVisibleDynamicMemberLookupDecls (BaseTy, dynamicConsumer, CurrDC, LS,
899
+ Reason, TypeResolver, GSB, Visited);
894
900
}
895
- ShadowedKeyPathMembers dynamicConsumer (overrideConsumer, knownMembers);
896
- lookupVisibleDynamicMemberLookupDecls (BaseTy, dynamicConsumer, CurrDC, LS,
897
- Reason, TypeResolver, GSB, Visited);
898
901
899
902
// Report the declarations we found to the real consumer.
900
903
for (const auto &DeclAndReason : overrideConsumer.DeclsToReport )
0 commit comments