Hi! 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.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2020-07-28 Jakub Jelinek <ja...@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. --- libcpp/lex.c.jj 2020-05-20 10:33:37.000000000 +0200 +++ libcpp/lex.c 2020-07-27 09:12:19.827974203 +0200 @@ -1885,7 +1885,8 @@ lex_raw_string (cpp_reader *pfile, cpp_t the best failure mode. */ prefix_len = 0; } - continue; + if (c != '\n') + continue; } if (phase != PHASE_NONE) --- gcc/testsuite/c-c++-common/cpp/pr96323.c.jj 2020-07-27 09:19:42.021557709 +0200 +++ gcc/testsuite/c-c++-common/cpp/pr96323.c 2020-07-27 09:30:37.197052063 +0200 @@ -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"; Jakub