diff options
-rw-r--r-- | include/clang/Parse/Action.h | 1 | ||||
-rw-r--r-- | include/clang/Parse/Parser.h | 3 | ||||
-rw-r--r-- | lib/Parse/MinimalAction.cpp | 15 | ||||
-rw-r--r-- | lib/Parse/ParseDeclCXX.cpp | 7 | ||||
-rw-r--r-- | lib/Sema/Sema.h | 1 | ||||
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 5 |
6 files changed, 20 insertions, 12 deletions
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 5a025caaf7..108d43d9e6 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -1079,6 +1079,7 @@ public: /// ActOnUsingDirective - This is called when using-directive is parsed. virtual DeclPtrTy ActOnUsingDeclaration(Scope *CurScope, + AccessSpecifier AS, SourceLocation UsingLoc, const CXXScopeSpec &SS, SourceLocation IdentLoc, diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index cf29e434eb..e366c2f256 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -1157,7 +1157,8 @@ private: DeclPtrTy ParseUsingDirective(unsigned Context, SourceLocation UsingLoc, SourceLocation &DeclEnd); DeclPtrTy ParseUsingDeclaration(unsigned Context, SourceLocation UsingLoc, - SourceLocation &DeclEnd); + SourceLocation &DeclEnd, + AccessSpecifier AS = AS_none); DeclPtrTy ParseStaticAssertDeclaration(SourceLocation &DeclEnd); DeclPtrTy ParseNamespaceAlias(SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, diff --git a/lib/Parse/MinimalAction.cpp b/lib/Parse/MinimalAction.cpp index 4e32de34b7..ee23c0038a 100644 --- a/lib/Parse/MinimalAction.cpp +++ b/lib/Parse/MinimalAction.cpp @@ -44,13 +44,14 @@ Action::DeclPtrTy Action::ActOnUsingDirective(Scope *CurScope, // Defined out-of-line here because of dependecy on AttributeList Action::DeclPtrTy Action::ActOnUsingDeclaration(Scope *CurScope, - SourceLocation UsingLoc, - const CXXScopeSpec &SS, - SourceLocation IdentLoc, - IdentifierInfo *TargetName, - OverloadedOperatorKind Op, - AttributeList *AttrList, - bool IsTypeName) { + AccessSpecifier AS, + SourceLocation UsingLoc, + const CXXScopeSpec &SS, + SourceLocation IdentLoc, + IdentifierInfo *TargetName, + OverloadedOperatorKind Op, + AttributeList *AttrList, + bool IsTypeName) { // FIXME: Parser seems to assume that Action::ActOn* takes ownership over // passed AttributeList, however other actions don't free it, is it diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index c002d48d72..31926ce0f5 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -259,7 +259,8 @@ Parser::DeclPtrTy Parser::ParseUsingDirective(unsigned Context, /// Parser::DeclPtrTy Parser::ParseUsingDeclaration(unsigned Context, SourceLocation UsingLoc, - SourceLocation &DeclEnd) { + SourceLocation &DeclEnd, + AccessSpecifier AS) { CXXScopeSpec SS; bool IsTypeName; @@ -324,7 +325,7 @@ Parser::DeclPtrTy Parser::ParseUsingDeclaration(unsigned Context, ExpectAndConsume(tok::semi, diag::err_expected_semi_after, AttrList ? "attributes list" : "namespace name", tok::semi); - return Actions.ActOnUsingDeclaration(CurScope, UsingLoc, SS, + return Actions.ActOnUsingDeclaration(CurScope, AS, UsingLoc, SS, IdentLoc, TargetName, Op, AttrList, IsTypeName); } @@ -949,7 +950,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, else { SourceLocation DeclEnd; // Otherwise, it must be using-declaration. - ParseUsingDeclaration(Declarator::MemberContext, UsingLoc, DeclEnd); + ParseUsingDeclaration(Declarator::MemberContext, UsingLoc, DeclEnd, AS); } return; } diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index accbcd1479..f3d202c2ff 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -1750,6 +1750,7 @@ public: bool IsTypeName); virtual DeclPtrTy ActOnUsingDeclaration(Scope *CurScope, + AccessSpecifier AS, SourceLocation UsingLoc, const CXXScopeSpec &SS, SourceLocation IdentLoc, diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 4c4dd41017..6d32f3fdbf 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -2094,6 +2094,7 @@ void Sema::PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir) { Sema::DeclPtrTy Sema::ActOnUsingDeclaration(Scope *S, + AccessSpecifier AS, SourceLocation UsingLoc, const CXXScopeSpec &SS, SourceLocation IdentLoc, @@ -2112,8 +2113,10 @@ Sema::DeclPtrTy Sema::ActOnUsingDeclaration(Scope *S, NamedDecl *UD = BuildUsingDeclaration(UsingLoc, SS, IdentLoc, Name, AttrList, IsTypeName); - if (UD) + if (UD) { PushOnScopeChains(UD, S); + UD->setAccess(AS); + } return DeclPtrTy::make(UD); } |