diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-09-29 18:03:57 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2011-09-29 18:03:57 +0000 |
commit | 70188b3fc24df1cb7d5c4d1f886a8d50ede8731f (patch) | |
tree | 5f2fc66e1b276eca9eb22f7d646f6204e8cba4a2 /clang | |
parent | e5a8f2f9f3f17942403f65ff1eec71411064180c (diff) | |
download | bcm5719-llvm-70188b3fc24df1cb7d5c4d1f886a8d50ede8731f.tar.gz bcm5719-llvm-70188b3fc24df1cb7d5c4d1f886a8d50ede8731f.zip |
Add support for parsing the optional attribute-specifier-seq at the
end of a decl-specifier-seq
llvm-svn: 140793
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 3 | ||||
-rw-r--r-- | clang/test/Parser/cxx0x-attributes.cpp | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index d4b5a2b5bfe..d904bcc8073 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -1541,6 +1541,9 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, switch (Tok.getKind()) { default: DoneWithDeclSpec: + // [C++0x] decl-specifier-seq: decl-specifier attribute-specifier-seq[opt] + MaybeParseCXX0XAttributes(DS.getAttributes()); + // If this is not a declaration specifier token, we're done reading decl // specifiers. First verify that DeclSpec's are consistent. DS.Finish(Diags, PP); diff --git a/clang/test/Parser/cxx0x-attributes.cpp b/clang/test/Parser/cxx0x-attributes.cpp index 0285ee1e9ac..75f23c657c6 100644 --- a/clang/test/Parser/cxx0x-attributes.cpp +++ b/clang/test/Parser/cxx0x-attributes.cpp @@ -2,6 +2,7 @@ // Declaration syntax checks [[]] int before_attr; +int [[]] between_attr; int after_attr [[]]; int * [[]] ptr_attr; int array_attr [1] [[]]; @@ -15,6 +16,7 @@ template <typename T> [[]] void template_attr (); int comma_attr [[,]]; // expected-error {{expected identifier}} int scope_attr [[foo::]]; // expected-error {{expected identifier}} +unsigned [[]] int attr_in_decl_spec; // expected-error {{expected unqualified-id}} int & [[]] ref_attr = after_attr; // expected-error {{an attribute list cannot appear here}} class foo { void after_const_attr () const [[]]; // expected-error {{expected body of lambda expression}} expected-error {{array has incomplete element type 'void'}} |