Add a workaround for decls that come from friend decls pointing to undeclared classes.

llvm-svn: 80438
This commit is contained in:
Anders Carlsson 2009-08-29 20:47:47 +00:00
parent 6df9e076ea
commit adf36b2379
2 changed files with 16 additions and 3 deletions

View File

@ -379,8 +379,18 @@ SourceLocation Decl::getBodyRBrace() const {
#ifndef NDEBUG
void Decl::CheckAccessDeclContext() const {
assert((Access != AS_none || isa<TranslationUnitDecl>(this) ||
!isa<CXXRecordDecl>(getDeclContext())) &&
// If the decl is the toplevel translation unit or if we're not in a
// record decl context, we don't need to check anything.
if (isa<TranslationUnitDecl>(this) ||
!isa<CXXRecordDecl>(getDeclContext()))
return;
// FIXME: This check should not be necessary - If a friend decl refers to an
// undeclared decl, then that decl shouldn't be in any decl context.
if (getFriendObjectKind() == FOK_Undeclared)
return;
assert(Access != AS_none &&
"Access specifier is AS_none inside a record decl");
}

View File

@ -202,7 +202,10 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) {
if (PrintAccess) {
AccessSpecifier AS = D->getAccess();
if (AS != CurAS) {
if (AS != CurAS &&
// FIXME: This check shouldn't be necessary.
D->getFriendObjectKind() == Decl::FOK_Undeclared) {
Print(AS);
Out << ":\n";
CurAS = AS;