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

Reply via email to