aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaAccess.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-03-27 04:54:36 +0000
committerAnders Carlsson <andersca@mac.com>2009-03-27 04:54:36 +0000
commitc60e88819a273d54faa71a2cd6c3d79dd48c12e0 (patch)
tree00e41afade243bd1c7aeedff91ce30985e106c6e /lib/Sema/SemaAccess.cpp
parent60d6b0d35e3c7c09554f8a4618b97a5d8d0c67a6 (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.cpp27
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;
+}