Don't try to find a scope corresponding to the search DC for an unfound

friend declaration;  this used to be important but is now just a waste of time
plus an unreasonable assertion.  Fixes PR6174.

llvm-svn: 101112
This commit is contained in:
John McCall 2010-04-13 01:44:10 +00:00
parent d33749b4a9
commit 77e41c1cc6
2 changed files with 19 additions and 8 deletions

View File

@ -4930,14 +4930,6 @@ Sema::DeclPtrTy Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
// class or function, the friend class or function is a member of
// the innermost enclosing namespace.
SearchDC = SearchDC->getEnclosingNamespaceContext();
// Look up through our scopes until we find one with an entity which
// matches our declaration context.
while (S->getEntity() &&
((DeclContext *)S->getEntity())->getPrimaryContext() != SearchDC) {
S = S->getParent();
assert(S && "No enclosing scope matching the enclosing namespace.");
}
}
// In C++, look for a shadow friend decl.

View File

@ -192,3 +192,22 @@ namespace test4 {
return a == b; // expected-note {{requested here}}
}
}
// PR6174
namespace test5 {
namespace ns {
class A;
}
class ns::A {
private: int x;
friend class B;
};
namespace ns {
class B {
int test(A *p) { return p->x; }
};
}
}