Skip to content

Commit 8e7bcb1

Browse files
committed
Protect the OverrideFilteringConsumer against certain bad situations a little more effectively.
1 parent 4d63471 commit 8e7bcb1

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

lib/AST/LookupVisibleDecls.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -619,16 +619,30 @@ class OverrideFilteringConsumer : public VisibleDeclConsumer {
619619
llvm::SetVector<FoundDeclTy> DeclsToReport;
620620
Type BaseTy;
621621
const DeclContext *DC;
622+
LazyResolver *TypeResolver;
622623

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) {
625627
assert(DC && BaseTy);
626628
}
627629

628630
void foundDecl(ValueDecl *VD, DeclVisibilityKind Reason) override {
629631
if (!AllFoundDecls.insert(VD).second)
630632
return;
631633

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+
632646
if (VD->isInvalid()) {
633647
FoundDecls[VD->getName()].insert(VD);
634648
DeclsToReport.insert(FoundDeclTy(VD, Reason));
@@ -718,7 +732,7 @@ class OverrideFilteringConsumer : public VisibleDeclConsumer {
718732
static void lookupVisibleMemberDecls(
719733
Type BaseTy, VisibleDeclConsumer &Consumer, const DeclContext *CurrDC,
720734
LookupState LS, DeclVisibilityKind Reason, LazyResolver *TypeResolver) {
721-
OverrideFilteringConsumer ConsumerWrapper(BaseTy, CurrDC);
735+
OverrideFilteringConsumer ConsumerWrapper(BaseTy, CurrDC, TypeResolver);
722736
VisitedSet Visited;
723737
lookupVisibleMemberDeclsImpl(BaseTy, ConsumerWrapper, CurrDC, LS, Reason,
724738
TypeResolver, Visited);

0 commit comments

Comments
 (0)