aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-03-05 12:53:21 -0500
committerJason Merrill <jason@gcc.gnu.org>2014-03-05 12:53:21 -0500
commit047023865e1edc63c708fb0f4475958119955928 (patch)
tree2c340d4c26e754e8bfcf2544411486bab87f7651
parent487125e75bf98e4e866cef265693cbb59b6cdf64 (diff)
downloadgcc-047023865e1edc63c708fb0f4475958119955928.zip
gcc-047023865e1edc63c708fb0f4475958119955928.tar.gz
gcc-047023865e1edc63c708fb0f4475958119955928.tar.bz2
parser.c (cp_parser_mem_initializer): Set input_location properly for init-list warning.
* parser.c (cp_parser_mem_initializer): Set input_location properly for init-list warning. (cp_parser_postfix_open_square_expression): Likewise. (cp_parser_parenthesized_expression_list): Likewise. (cp_parser_new_initializer): Likewise. (cp_parser_jump_statement): Likewise. (cp_parser_initializer): Likewise. (cp_parser_functional_cast): Likewise. From-SVN: r208350
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/parser.c14
-rw-r--r--gcc/testsuite/g++.dg/template/crash90.C3
3 files changed, 26 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6f2b38a..379ac73 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,14 @@
+2014-03-05 Jason Merrill <jason@redhat.com>
+
+ * parser.c (cp_parser_mem_initializer): Set input_location
+ properly for init-list warning.
+ (cp_parser_postfix_open_square_expression): Likewise.
+ (cp_parser_parenthesized_expression_list): Likewise.
+ (cp_parser_new_initializer): Likewise.
+ (cp_parser_jump_statement): Likewise.
+ (cp_parser_initializer): Likewise.
+ (cp_parser_functional_cast): Likewise.
+
2014-03-04 Jason Merrill <jason@redhat.com>
PR c++/60417
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index bb7d268..5b3e489 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -6359,6 +6359,8 @@ cp_parser_postfix_open_square_expression (cp_parser *parser,
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
bool expr_nonconst_p;
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
index = cp_parser_braced_list (parser, &expr_nonconst_p);
if (flag_cilkplus
@@ -6671,6 +6673,8 @@ cp_parser_parenthesized_expression_list (cp_parser* parser,
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
/* A braced-init-list. */
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
expr = cp_parser_braced_list (parser, &expr_non_constant_p);
if (non_constant_p && expr_non_constant_p)
@@ -7519,6 +7523,8 @@ cp_parser_new_initializer (cp_parser* parser)
{
tree t;
bool expr_non_constant_p;
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
t = cp_parser_braced_list (parser, &expr_non_constant_p);
CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
@@ -10675,6 +10681,8 @@ cp_parser_jump_statement (cp_parser* parser)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
expr = cp_parser_braced_list (parser, &expr_non_constant_p);
}
@@ -12353,6 +12361,8 @@ cp_parser_mem_initializer (cp_parser* parser)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
bool expr_non_constant_p;
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
@@ -18801,6 +18811,8 @@ cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
}
else if (token->type == CPP_OPEN_BRACE)
{
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
init = cp_parser_braced_list (parser, non_constant_p);
CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
@@ -23236,6 +23248,8 @@ cp_parser_functional_cast (cp_parser* parser, tree type)
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
+ cp_token *token = cp_lexer_peek_token (parser->lexer);
+ cp_lexer_set_source_position_from_token (token);
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
expression_list = cp_parser_braced_list (parser, &nonconst_p);
CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
diff --git a/gcc/testsuite/g++.dg/template/crash90.C b/gcc/testsuite/g++.dg/template/crash90.C
index 6fe247c..4cfc408 100644
--- a/gcc/testsuite/g++.dg/template/crash90.C
+++ b/gcc/testsuite/g++.dg/template/crash90.C
@@ -4,5 +4,4 @@ template < unsigned >
struct A ;
template < typename >
struct B ;
-template < typename T , A < B < T > // { dg-error "initializer|parse error|valid type|expected" }
-{ }
+template < typename T , A < B < T > {}// { dg-error "initializer|parse error|type|expected" }