of any previous declaration in case we replace it in a class's declaration table.
Fixes bug 4858. This sort of thing makes me reconsider putting friend declarations in
declaration lists.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80750
91177308-0d34-0410-b5e6-
96231b3b80d8
if (TUK == TUK_Friend) {
// Friend tag decls are visible in fairly strange ways.
if (!CurContext->isDependentContext()) {
+ // We might be replacing an existing declaration in the lookup tables;
+ // if so, borrow its access specifier.
+ if (PrevDecl)
+ New->setAccess(PrevDecl->getAccess());
+
DeclContext *DC = New->getDeclContext()->getLookupContext();
DC->makeDeclVisibleInContext(New, /* Recoverable = */ false);
if (Scope *EnclosingScope = getScopeForDeclContext(S, DC))
typedef void ftypedef();
friend ftypedef typedeffed_function; // okay (because it's not declared as a member)
+
+ class facet;
+ friend class facet; // should not assert
+ class facet {};
};
A::UndeclaredSoFar y; // expected-error {{ unknown type name 'UndeclaredSoFar' }}