diff options
author | DeLesley Hutchins <delesley@google.com> | 2012-03-02 22:12:59 +0000 |
---|---|---|
committer | DeLesley Hutchins <delesley@google.com> | 2012-03-02 22:12:59 +0000 |
commit | bd2ee13e78bae1f461628a038c584ba42a35697c (patch) | |
tree | 00da1a588aa491de1cb7879c6c4eb7e200769f85 /clang/lib/Parse/ParseDeclCXX.cpp | |
parent | a2587ef26d802ccc00b7853ffdab7b8070a67ad8 (diff) | |
download | bcm5719-llvm-bd2ee13e78bae1f461628a038c584ba42a35697c.tar.gz bcm5719-llvm-bd2ee13e78bae1f461628a038c584ba42a35697c.zip |
Make late-parsed attributes follow the conventions of ordinary
GNU attributes to a better extent, by allowing them in more
places on a declator.
llvm-svn: 151945
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 3bf7005769e..983bd7ee152 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -1782,11 +1782,15 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, return; } + // Hold late-parsed attributes so we can attach a Decl to them later. + LateParsedAttrList CommonLateParsedAttrs; + // decl-specifier-seq: // Parse the common declaration-specifiers piece. ParsingDeclSpec DS(*this, TemplateDiags); DS.takeAttributesFrom(attrs); - ParseDeclarationSpecifiers(DS, TemplateInfo, AS, DSC_class); + ParseDeclarationSpecifiers(DS, TemplateInfo, AS, DSC_class, + &CommonLateParsedAttrs); MultiTemplateParamsArg TemplateParams(Actions, TemplateInfo.TemplateParams? TemplateInfo.TemplateParams->data() : 0, @@ -1893,8 +1897,11 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParseCXXInlineMethodDef(AS, AccessAttrs, DeclaratorInfo, TemplateInfo, VS, DefinitionKind, Init); + for (unsigned i = 0, ni = CommonLateParsedAttrs.size(); i < ni; ++i) { + CommonLateParsedAttrs[i]->addDecl(FunDecl); + } for (unsigned i = 0, ni = LateParsedAttrs.size(); i < ni; ++i) { - LateParsedAttrs[i]->setDecl(FunDecl); + LateParsedAttrs[i]->addDecl(FunDecl); } LateParsedAttrs.clear(); @@ -1981,8 +1988,11 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, } // Set the Decl for any late parsed attributes + for (unsigned i = 0, ni = CommonLateParsedAttrs.size(); i < ni; ++i) { + CommonLateParsedAttrs[i]->addDecl(ThisDecl); + } for (unsigned i = 0, ni = LateParsedAttrs.size(); i < ni; ++i) { - LateParsedAttrs[i]->setDecl(ThisDecl); + LateParsedAttrs[i]->addDecl(ThisDecl); } LateParsedAttrs.clear(); |