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:
parent
862a58ed83
commit
ae49af9485
8
gcc/testsuite/c-c++-common/cpp/pr96323.c
Normal file
8
gcc/testsuite/c-c++-common/cpp/pr96323.c
Normal 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";
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user