diff options
author | Anders Carlsson <andersca@mac.com> | 2009-03-27 04:54:36 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-03-27 04:54:36 +0000 |
commit | c60e88819a273d54faa71a2cd6c3d79dd48c12e0 (patch) | |
tree | 00e41afade243bd1c7aeedff91ce30985e106c6e /lib/Sema/SemaAccess.cpp | |
parent | 60d6b0d35e3c7c09554f8a4618b97a5d8d0c67a6 (diff) |
Move Sema::SetMemberAccessSpecifier to SemaAccess.cpp
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67820 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaAccess.cpp')
-rw-r--r-- | lib/Sema/SemaAccess.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index 7d58ea7d64..2ac9a539f3 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -10,3 +10,30 @@ // This file provides Sema routines for C++ access control semantics. // //===----------------------------------------------------------------------===// + +#include "Sema.h" +using namespace clang; + +bool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, + NamedDecl *PrevMemberDecl, + AccessSpecifier LexicalAS) { + if (!PrevMemberDecl) { + // Use the lexical access specifier. + MemberDecl->setAccess(LexicalAS); + return false; + } + + // C++ [class.access.spec]p3: When a member is redeclared its access + // specifier must be same as its initial declaration. + if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) { + Diag(MemberDecl->getLocation(), + diag::err_class_redeclared_with_different_access) + << MemberDecl << LexicalAS; + Diag(PrevMemberDecl->getLocation(), diag::note_previous_access_declaration) + << PrevMemberDecl << PrevMemberDecl->getAccess(); + return true; + } + + MemberDecl->setAccess(PrevMemberDecl->getAccess()); + return false; +} |