@@ -619,16 +619,30 @@ class OverrideFilteringConsumer : public VisibleDeclConsumer {
619
619
llvm::SetVector<FoundDeclTy> DeclsToReport;
620
620
Type BaseTy;
621
621
const DeclContext *DC;
622
+ LazyResolver *TypeResolver;
622
623
623
- OverrideFilteringConsumer (Type BaseTy, const DeclContext *DC)
624
- : BaseTy(BaseTy->getRValueType ()), DC(DC) {
624
+ OverrideFilteringConsumer (Type BaseTy, const DeclContext *DC,
625
+ LazyResolver *resolver)
626
+ : BaseTy(BaseTy->getRValueType ()), DC(DC), TypeResolver(resolver) {
625
627
assert (DC && BaseTy);
626
628
}
627
629
628
630
void foundDecl (ValueDecl *VD, DeclVisibilityKind Reason) override {
629
631
if (!AllFoundDecls.insert (VD).second )
630
632
return ;
631
633
634
+ // If this kind of declaration doesn't participate in overriding, there's
635
+ // no filtering to do here.
636
+ if (!isa<AbstractFunctionDecl>(VD) && !isa<AbstractStorageDecl>(VD)) {
637
+ DeclsToReport.insert (FoundDeclTy (VD, Reason));
638
+ return ;
639
+ }
640
+
641
+ if (TypeResolver) {
642
+ TypeResolver->resolveDeclSignature (VD);
643
+ TypeResolver->resolveAccessibility (VD);
644
+ }
645
+
632
646
if (VD->isInvalid ()) {
633
647
FoundDecls[VD->getName ()].insert (VD);
634
648
DeclsToReport.insert (FoundDeclTy (VD, Reason));
@@ -718,7 +732,7 @@ class OverrideFilteringConsumer : public VisibleDeclConsumer {
718
732
static void lookupVisibleMemberDecls (
719
733
Type BaseTy, VisibleDeclConsumer &Consumer, const DeclContext *CurrDC,
720
734
LookupState LS, DeclVisibilityKind Reason, LazyResolver *TypeResolver) {
721
- OverrideFilteringConsumer ConsumerWrapper (BaseTy, CurrDC);
735
+ OverrideFilteringConsumer ConsumerWrapper (BaseTy, CurrDC, TypeResolver );
722
736
VisitedSet Visited;
723
737
lookupVisibleMemberDeclsImpl (BaseTy, ConsumerWrapper, CurrDC, LS, Reason,
724
738
TypeResolver, Visited);
0 commit comments