diff options
author | David Malcolm <dmalcolm@redhat.com> | 2016-06-20 16:37:28 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2016-06-20 16:37:28 +0000 |
commit | 842107e43de51855cd5870be1a67bc4eabca4a25 (patch) | |
tree | 5df2315bb993f48933d4efe20cb3866896e28adf /gcc/cp/parser.c | |
parent | 9ee6540a77ee11d1aa70d86e08642406fb150fe0 (diff) | |
download | gcc-842107e43de51855cd5870be1a67bc4eabca4a25.zip gcc-842107e43de51855cd5870be1a67bc4eabca4a25.tar.gz gcc-842107e43de51855cd5870be1a67bc4eabca4a25.tar.bz2 |
C++ FE: Show both locations in string literal concatenation error
gcc/cp/ChangeLog:
* parser.c (cp_parser_string_literal): Convert non-standard
concatenation error to directly use a rich_location, and
use that to add the location of the first literal to the
diagnostic.
gcc/testsuite/ChangeLog:
* g++.dg/diagnostic/string-literal-concat.C: New test case.
From-SVN: r237608
Diffstat (limited to 'gcc/cp/parser.c')
-rw-r--r-- | gcc/cp/parser.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 0846f0c..d1f06fd 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -3893,13 +3893,12 @@ cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok, } else { - location_t last_tok_loc; + location_t last_tok_loc = tok->location; gcc_obstack_init (&str_ob); count = 0; do { - last_tok_loc = tok->location; cp_lexer_consume_token (parser->lexer); count++; str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree); @@ -3931,13 +3930,19 @@ cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok, if (type == CPP_STRING) type = curr_type; else if (curr_type != CPP_STRING) - error_at (tok->location, - "unsupported non-standard concatenation " - "of string literals"); + { + rich_location rich_loc (line_table, tok->location); + rich_loc.add_range (last_tok_loc, false); + error_at_rich_loc (&rich_loc, + "unsupported non-standard concatenation " + "of string literals"); + } } obstack_grow (&str_ob, &str, sizeof (cpp_string)); + last_tok_loc = tok->location; + tok = cp_lexer_peek_token (parser->lexer); if (cpp_userdef_string_p (tok->type)) { |