aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-12-06 09:45:11 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-12-06 09:45:11 -0500
commit9e04d8a2a0619f682eb318cd132ef9d62d142815 (patch)
tree0c64c0a410f08e53dfe221b0eb67b889bc38d035 /gcc/cp
parent695edbac5c1b02ac162a301d6886dc073b0361fb (diff)
downloadgcc-9e04d8a2a0619f682eb318cd132ef9d62d142815.zip
gcc-9e04d8a2a0619f682eb318cd132ef9d62d142815.tar.gz
gcc-9e04d8a2a0619f682eb318cd132ef9d62d142815.tar.bz2
re PR c++/54947 ([C++11] lambda cannot capture-by-copy inside braced-init-list)
PR c++/54947 * parser.c (cp_parser_initializer_list): Don't require an expression in [] to be constant until we know it's a C99 designator. From-SVN: r194256
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1a1f459..96a88b9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2012-12-06 Jason Merrill <jason@redhat.com>
+ PR c++/54947
+ * parser.c (cp_parser_initializer_list): Don't require an
+ expression in [] to be constant until we know it's a C99
+ designator.
+
PR c++/55015
PR c++/53821
* semantics.c (maybe_add_lambda_conv_op): Revert earlier change.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 190b8d9..a010f1f 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -17923,11 +17923,14 @@ cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
/* In C++11, [ could start a lambda-introducer. */
cp_parser_parse_tentatively (parser);
cp_lexer_consume_token (parser->lexer);
- designator = cp_parser_constant_expression (parser, false, NULL);
+ bool non_const = false;
+ designator = cp_parser_constant_expression (parser, true, &non_const);
cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
cp_parser_require (parser, CPP_EQ, RT_EQ);
if (!cp_parser_parse_definitely (parser))
designator = NULL_TREE;
+ else if (non_const)
+ require_potential_rvalue_constant_expression (designator);
}
else
designator = NULL_TREE;