]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/58707 ([C++11] A greater-than operator in square brackets should not end...
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 15 Oct 2013 16:36:11 +0000 (16:36 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 15 Oct 2013 16:36:11 +0000 (16:36 +0000)
/cp
2013-10-15  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/58707
* parser.c (cp_parser_postfix_open_square_expression): Set
parser->greater_than_is_operator_p for the argument.

/testsuite
2013-10-15  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/58707
* g++.dg/cpp0x/pr58707.C: New.

From-SVN: r203624

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/pr58707.C [new file with mode: 0644]

index d1af38217bc3471a67f68e31db782f6b7faf9b40..ed30e1bccbb95a0c65a8286b7d7eca0a537c1f36 100644 (file)
@@ -1,3 +1,9 @@
+2013-10-15  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/58707
+       * parser.c (cp_parser_postfix_open_square_expression): Set
+       parser->greater_than_is_operator_p for the argument.
+
 2013-10-11  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/58633
index 4189bf6f117b4731b699098783b7a8dd1072a4f0..e33f5a278ab31705dbf31f971dc9d9a0a36e8eed 100644 (file)
@@ -6231,10 +6231,14 @@ cp_parser_postfix_open_square_expression (cp_parser *parser,
 {
   tree index = NULL_TREE;
   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
+  bool saved_greater_than_is_operator_p;
 
   /* Consume the `[' token.  */
   cp_lexer_consume_token (parser->lexer);
 
+  saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
+  parser->greater_than_is_operator_p = true;
+
   /* Parse the index expression.  */
   /* ??? For offsetof, there is a question of what to allow here.  If
      offsetof is not being used in an integral constant expression context,
@@ -6278,6 +6282,8 @@ cp_parser_postfix_open_square_expression (cp_parser *parser,
        index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
     }
 
+  parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
+
   /* Look for the closing `]'.  */
   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
 
index 1cbcfdca003f656be0f951f0b45a4a475425590e..f290da8ac78c5fb2e47f4fcd1d70532f7aafc8de 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-15  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/58707
+       * g++.dg/cpp0x/pr58707.C: New.
+
 2013-10-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * c-c++-common/cpp/openmp-define-3.c: Move effective target check
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58707.C b/gcc/testsuite/g++.dg/cpp0x/pr58707.C
new file mode 100644 (file)
index 0000000..12f2e30
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/58707
+// { dg-do compile { target c++11 } }
+
+template<int i> class TC { };
+constexpr int foo[] = { 42 };
+TC<foo[0 > 1]> bar;