]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/54955 - Fail to parse alignas expr at the beginning of a declaration
authordodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 Oct 2012 08:55:43 +0000 (08:55 +0000)
committerdodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 31 Oct 2012 08:55:43 +0000 (08:55 +0000)
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

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/gen-attrs-48-2.C [new file with mode: 0644]

index 1eb1fe4f2c1567396dc62e28a491d1080dc1ef3c..a1abdde3f3d67809c5450f0325184a55a24f1cac 100644 (file)
@@ -1,3 +1,12 @@
+2012-10-31  Dodji Seketeli  <dodji@redhat.com>
+
+       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  <jwakely.gcc@gmail.com>
 
        PR c++/54930
index 940356377a0c53a61cdc8533eda7849f349280ae..f2642aba33a55c7d1f85d4726839643013de3395 100644 (file)
@@ -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
index ac09b8ada55bfffc8d024145da262d313edcaee4..10f98bc76c022e8d65837bc22255685ff841ef14 100644 (file)
@@ -1,3 +1,8 @@
+2012-10-31  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/54955
+       * g++.dg/cpp0x/gen-attrs-48-2.C: New test.
+
 2012-10-31  Jakub Jelinek  <jakub@redhat.com>
 
        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 (file)
index 0000000..3cc5897
--- /dev/null
@@ -0,0 +1,4 @@
+// Origin: PR c++/54955
+// { dg-do compile { target c++11 } }
+
+alignas(double) int f;