diff options
author | David Malcolm <dmalcolm@redhat.com> | 2018-06-28 20:24:49 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2018-06-28 20:24:49 +0000 |
commit | eacb16dc798d06acfb9741a2496584ab0728257a (patch) | |
tree | 608e9506c05b1ab10f75647e2a1b246d7aa00777 /gcc | |
parent | b8be1451289da4dfd69673b768bdc0e901a0fcef (diff) | |
download | gcc-eacb16dc798d06acfb9741a2496584ab0728257a.zip gcc-eacb16dc798d06acfb9741a2496584ab0728257a.tar.gz gcc-eacb16dc798d06acfb9741a2496584ab0728257a.tar.bz2 |
C++: less verbose error-recovery for version conflict markers
gcc/cp/ChangeLog:
* parser.c (cp_parser_error_1): After issuing a conflict marker
error, consume tokens until the end of the source line.
gcc/testsuite/ChangeLog:
* g++.dg/conflict-markers-2.C: New test.
From-SVN: r262232
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/conflict-markers-2.C | 17 |
3 files changed, 36 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 862b737..906f0b4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-06-28 David Malcolm <dmalcolm@redhat.com> + + * parser.c (cp_parser_error_1): After issuing a conflict marker + error, consume tokens until the end of the source line. + 2018-06-28 Jason Merrill <jason@redhat.com> PR c++/86342 - -Wdeprecated-copy and system headers. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a02091e..a076de1 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -2862,6 +2862,20 @@ cp_parser_error_1 (cp_parser* parser, const char* gmsgid, if (cp_lexer_peek_conflict_marker (parser->lexer, token->type, &loc)) { error_at (loc, "version control conflict marker in file"); + expanded_location token_exploc = expand_location (token->location); + /* Consume tokens until the end of the source line. */ + while (1) + { + cp_lexer_consume_token (parser->lexer); + cp_token *next = cp_lexer_peek_token (parser->lexer); + if (next == NULL) + break; + expanded_location next_exploc = expand_location (next->location); + if (next_exploc.file != token_exploc.file) + break; + if (next_exploc.line != token_exploc.line) + break; + } return; } } diff --git a/gcc/testsuite/g++.dg/conflict-markers-2.C b/gcc/testsuite/g++.dg/conflict-markers-2.C new file mode 100644 index 0000000..4fc3820 --- /dev/null +++ b/gcc/testsuite/g++.dg/conflict-markers-2.C @@ -0,0 +1,17 @@ +// { dg-do compile { target c++11 } } + +extern void f1 (void); +extern void f2 (void); +extern void f3 (void); +extern void f4 (void); + +void test () +{ + f1 (); +<<<<<<< HEAD // { dg-error "conflict marker" } + f2 (); +======= // { dg-error "conflict marker" } + f3 (); +>>>>>>> 252be53... Some commit message // { dg-error "conflict marker" } + f4 (); +} |