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