libcpp: Fix up raw string literal parsing error-recovery [PR96323]

For (invalid) newline inside of the raw string literal delimiter, doing
continue means we skip the needed processing of newlines.  Instead of
duplicating that, this patch just doesn't continue for those.

2020-07-28  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/96323
	* lex.c (lex_raw_string): For c == '\n' don't continue after reporting
	an prefix delimiter error.

	* c-c++-common/cpp/pr96323.c: New test.
This commit is contained in:
Jakub Jelinek 2020-07-28 15:40:15 +02:00
parent 862a58ed83
commit ae49af9485
2 changed files with 10 additions and 1 deletions

View File

@ -0,0 +1,8 @@
/* PR preprocessor/96323 */
/* { dg-do preprocess } */
/* { dg-options "-std=gnu99 -Wno-c++-compat -trigraphs" { target c } } */
/* { dg-options "-std=c++0x" { target c++ } } */
/* { dg-error "invalid new-line in raw string delimiter" "" { target *-*-* } .+2 } */
/* { dg-warning "missing terminating . character" "" { target *-*-* } .+2 } */
const char tu[] = R"a";
const char tua[] = "(R)a";

View File

@ -1885,7 +1885,8 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
the best failure mode. */
prefix_len = 0;
}
continue;
if (c != '\n')
continue;
}
if (phase != PHASE_NONE)