From: dodji Date: Wed, 31 Oct 2012 08:55:43 +0000 (+0000) Subject: PR c++/54955 - Fail to parse alignas expr at the beginning of a declaration X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=27b85ef8b0f957eb8336bb366f4f24e5bb56f882;p=thirdparty%2Fgcc.git PR c++/54955 - Fail to parse alignas expr at the beginning of a declaration In this PR, g++ embarrassingly fails to parse the simple alignas expression below: alignas(double) int f; even though the simple-declaration production in Clause 7 suggests otherwise. Fixed thus and tested on x86_64-unknown-linux-gnu against trunk. gcc/cp PR c++/54955 * parser.c (cp_nth_tokens_can_be_std_attribute_p): Recognize the 'Alignas' keyword as the beginning of a c++11 attribute specifier. Update the comment of the function. (cp_next_tokens_can_be_gnu_attribute_p): Update the comment of the function. gcc/testsuite/ PR c++/54955 * g++.dg/cpp0x/gen-attrs-48-2.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193029 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1eb1fe4f2c15..a1abdde3f3d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2012-10-31 Dodji Seketeli + + PR c++/54955 + * parser.c (cp_nth_tokens_can_be_std_attribute_p): Recognize the + 'Alignas' keyword as the beginning of a c++11 attribute specifier. + Update the comment of the function. + (cp_next_tokens_can_be_gnu_attribute_p): Update the comment of the + function. + 2012-10-29 Jonathan Wakely PR c++/54930 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 940356377a0c..f2642aba33a5 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -20324,7 +20324,7 @@ cp_next_tokens_can_be_gnu_attribute_p (cp_parser *parser) } /* Return TRUE iff the next tokens in the stream are possibly the - beginning of a standard C++-11 attribute. */ + beginning of a standard C++-11 attribute specifier. */ static bool cp_next_tokens_can_be_std_attribute_p (cp_parser *parser) @@ -20333,7 +20333,7 @@ cp_next_tokens_can_be_std_attribute_p (cp_parser *parser) } /* Return TRUE iff the next Nth tokens in the stream are possibly the - beginning of a standard C++-11 attribute. */ + beginning of a standard C++-11 attribute specifier. */ static bool cp_nth_tokens_can_be_std_attribute_p (cp_parser *parser, size_t n) @@ -20341,9 +20341,10 @@ cp_nth_tokens_can_be_std_attribute_p (cp_parser *parser, size_t n) cp_token *token = cp_lexer_peek_nth_token (parser->lexer, n); return (cxx_dialect >= cxx0x - && token->type == CPP_OPEN_SQUARE - && (token = cp_lexer_peek_nth_token (parser->lexer, n + 1)) - && token->type == CPP_OPEN_SQUARE); + && ((token->type == CPP_KEYWORD && token->keyword == RID_ALIGNAS) + || (token->type == CPP_OPEN_SQUARE + && (token = cp_lexer_peek_nth_token (parser->lexer, n + 1)) + && token->type == CPP_OPEN_SQUARE))); } /* Return TRUE iff the next Nth tokens in the stream are possibly the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac09b8ada55b..10f98bc76c02 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-10-31 Dodji Seketeli + + PR c++/54955 + * g++.dg/cpp0x/gen-attrs-48-2.C: New test. + 2012-10-31 Jakub Jelinek PR tree-optimization/19105 diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C new file mode 100644 index 000000000000..3cc58976b03d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C @@ -0,0 +1,4 @@ +// Origin: PR c++/54955 +// { dg-do compile { target c++11 } } + +alignas(double) int f;