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:
parent
05afe5e084
commit
2bd636f589
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue