It never makes sense to do a lookup into a LinkageSpecDecl, so assert that we

don't, and clean up the places that do it.

The change to ASTWriter is surprising, but the deleted code is a no-op as of
r152608.

llvm-svn: 152609
This commit is contained in:
Nick Lewycky 2012-03-13 04:12:34 +00:00
parent 05afe5e084
commit 2bd636f589
3 changed files with 9 additions and 9 deletions

View File

@ -1084,6 +1084,9 @@ void DeclContext::addDeclInternal(Decl *D) {
DeclContext::lookup_result
DeclContext::lookup(DeclarationName Name) {
assert(DeclKind != Decl::LinkageSpec &&
"Should not perform lookups into linkage specs!");
DeclContext *PrimaryContext = getPrimaryContext();
if (PrimaryContext != this)
return PrimaryContext->lookup(Name);

View File

@ -106,14 +106,15 @@ namespace {
assert(InnermostFileDC && InnermostFileDC->isFileContext());
for (; S; S = S->getParent()) {
// C++ [namespace.udir]p1:
// A using-directive shall not appear in class scope, but may
// appear in namespace scope or in block scope.
DeclContext *Ctx = static_cast<DeclContext*>(S->getEntity());
if (Ctx && !Ctx->isFunctionOrMethod()) {
DeclContext *EffectiveDC = (Ctx->isFileContext() ? Ctx : InnermostFileDC);
visit(Ctx, EffectiveDC);
} else {
if (Ctx && Ctx->isFileContext()) {
visit(Ctx, Ctx);
} else if (!Ctx || Ctx->isFunctionOrMethod()) {
Scope::udir_iterator I = S->using_directives_begin(),
End = S->using_directives_end();
for (; I != End; ++I)
visit(*I, InnermostFileDC);
}

View File

@ -2792,10 +2792,6 @@ uint64_t ASTWriter::WriteDeclContextVisibleBlock(ASTContext &Context,
if (DC->isTranslationUnit() && !Context.getLangOpts().CPlusPlus)
return 0;
// Force the DeclContext to build a its name-lookup table.
if (!DC->hasExternalVisibleStorage())
DC->lookup(DeclarationName());
// Serialize the contents of the mapping used for lookup. Note that,
// although we have two very different code paths, the serialized
// representation is the same for both cases: a declaration name,