From: John McCall Date: Wed, 23 Dec 2009 00:37:40 +0000 (+0000) Subject: Set a member's access specifier even if it doesn't match the previous specifier. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=44e067bd8f923ba8e7c24b2189e06717d70015c8;p=clang Set a member's access specifier even if it doesn't match the previous specifier. Prevents an assert on successive redeclarations. Fixed PR5573. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91956 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index 21f83a560d..b7cc37b6c9 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -37,6 +37,8 @@ bool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, << MemberDecl << LexicalAS; Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) << PrevMemberDecl << PrevMemberDecl->getAccess(); + + MemberDecl->setAccess(LexicalAS); return true; } diff --git a/test/SemaCXX/access.cpp b/test/SemaCXX/access.cpp index ae2fef11f8..6115ff6a94 100644 --- a/test/SemaCXX/access.cpp +++ b/test/SemaCXX/access.cpp @@ -21,3 +21,14 @@ protected: private: template struct A {}; // expected-error {{'A' redeclared with 'private' access}} }; + +// PR5573 +namespace test1 { + class A { + private: + class X; // expected-note {{previously declared 'private' here}} + public: + class X; // expected-error {{ 'X' redeclared with 'public' access}} + class X {}; + }; +}