[PCH/Modules] In ASTReader::completeVisibleDeclsMap, make sure to visit all

modules when getting the decls for a namespace or translation unit.

Otherwise the code-completion results will not be complete.

rdar://12889089

llvm-svn: 170596
This commit is contained in:
Argyrios Kyrtzidis 2012-12-19 22:21:18 +00:00
parent 349d1a35ff
commit 2810e9dee0
2 changed files with 40 additions and 4 deletions

View File

@ -5429,13 +5429,15 @@ namespace {
ASTReader &Reader;
llvm::SmallVectorImpl<const DeclContext *> &Contexts;
llvm::DenseMap<DeclarationName, SmallVector<NamedDecl *, 8> > &Decls;
bool VisitAll;
public:
DeclContextAllNamesVisitor(ASTReader &Reader,
SmallVectorImpl<const DeclContext *> &Contexts,
llvm::DenseMap<DeclarationName,
SmallVector<NamedDecl *, 8> > &Decls)
: Reader(Reader), Contexts(Contexts), Decls(Decls) { }
SmallVector<NamedDecl *, 8> > &Decls,
bool VisitAll)
: Reader(Reader), Contexts(Contexts), Decls(Decls), VisitAll(VisitAll) { }
static bool visit(ModuleFile &M, void *UserData) {
DeclContextAllNamesVisitor *This
@ -5476,7 +5478,7 @@ namespace {
}
}
return FoundAnything;
return FoundAnything && !This->VisitAll;
}
};
}
@ -5502,7 +5504,8 @@ void ASTReader::completeVisibleDeclsMap(const DeclContext *DC) {
}
}
DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls);
DeclContextAllNamesVisitor Visitor(*this, Contexts, Decls,
/*VisitAll=*/DC->isFileContext());
ModuleMgr.visit(&DeclContextAllNamesVisitor::visit, &Visitor);
++NumVisibleDeclContextsRead;

View File

@ -0,0 +1,33 @@
// <rdar://12889089>
#ifndef HEADER1
#define HEADER1
// CHECK-TU: FunctionDecl:{ResultType void}{TypedText foo}
void foo();
namespace Cake {
// CHECK-NAMESPACE: FunctionDecl:{ResultType void}{TypedText lie}
void lie();
}
#elif !defined(HEADER2)
#define HEADER2
namespace Cake {
extern int Baz;
}
#else
void func() {
Cake::
}
#endif
// RUN: c-index-test -write-pch %t1.h.pch %s
// RUN: c-index-test -write-pch %t2.h.pch %s -include %t1.h
// RUN: c-index-test -code-completion-at=%s:25:1 %s -include %t2.h | FileCheck -check-prefix=CHECK-TU %s
// RUN: c-index-test -code-completion-at=%s:25:7 %s -include %t2.h | FileCheck -check-prefix=CHECK-NAMESPACE %s