From 521506258fa5b6b57a50b0570d8208894ed19f79 Mon Sep 17 00:00:00 2001
From: Jason Merrill <jason@redhat.com>
Date: Mon, 29 Mar 2010 11:00:43 -0400
Subject: [PATCH] Some raw string changes from N3077

	Some raw string changes from N3077
	* charset.c (cpp_interpret_string): Change inner delimiters to ().
	* lex.c (lex_raw_string): Likewise.  Also disallow '\' in delimiter.

From-SVN: r157797
---
 gcc/testsuite/ChangeLog                 |  13 +++
 gcc/testsuite/g++.dg/ext/raw-string-1.C |  74 +++++++-------
 gcc/testsuite/g++.dg/ext/raw-string-2.C | 130 ++++++++++++------------
 gcc/testsuite/g++.dg/ext/raw-string-3.C |  20 ++--
 gcc/testsuite/g++.dg/ext/raw-string-5.C |  15 +--
 gcc/testsuite/g++.dg/ext/raw-string-6.C |   2 +-
 gcc/testsuite/g++.dg/ext/raw-string-7.C |   8 +-
 libcpp/ChangeLog                        |   6 ++
 libcpp/charset.c                        |   2 +-
 libcpp/lex.c                            |  10 +-
 10 files changed, 151 insertions(+), 129 deletions(-)

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e429f264eb1e..e2fd72efee58 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,16 @@
+2010-03-29  Jason Merrill  <jason@redhat.com>
+
+	N3077
+	* g++.dg/ext/raw-string-1.C: Change [] to ().
+	* g++.dg/ext/raw-string-2.C: Change [] to ().
+	Don't use \ in delimiter.
+	* g++.dg/ext/raw-string-3.C: Change [] to ().
+	* g++.dg/ext/raw-string-4.C: Change [] to ().
+	* g++.dg/ext/raw-string-5.C: Change [] to ().
+	Test for error on \ in delimiter.
+	* g++.dg/ext/raw-string-6.C: Change [] to ().
+	* g++.dg/ext/raw-string-7.C: Change [] to ().
+
 2010-03-29  Jie Zhang  <jie@codesourcery.com>
 
 	PR 43564
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-1.C b/gcc/testsuite/g++.dg/ext/raw-string-1.C
index 0e8abf8b498f..c2426d5395f3 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-1.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-1.C
@@ -1,60 +1,60 @@
 // { dg-do run }
 // { dg-options "-std=c++0x" }
 
-const char s0[] = R"[a\
+const char s0[] = R"(a\
 \u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-c]";
+c)";
 const char s1[] = "a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-const char s2[] = R"*|*[a\
+const char s2[] = R"*|*(a\
 b
-c]"
-c]*|"
-c]*|*";
-const char s3[] = "ab\nc]\"\nc]*|\"\nc";
+c)"
+c)*|"
+c)*|*";
+const char s3[] = "ab\nc)\"\nc)*|\"\nc";
 
-const char t0[] = u8R"[a\
+const char t0[] = u8R"(a\
 \u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-c]";
+c)";
 const char t1[] = u8"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-const char t2[] = u8R"*|*[a\
+const char t2[] = u8R"*|*(a\
 b
-c]"
-c]*|"
-c]*|*";
-const char t3[] = u8"ab\nc]\"\nc]*|\"\nc";
+c)"
+c)*|"
+c)*|*";
+const char t3[] = u8"ab\nc)\"\nc)*|\"\nc";
 
-const char16_t u0[] = uR"[a\
+const char16_t u0[] = uR"(a\
 \u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-c]";
+c)";
 const char16_t u1[] = u"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-const char16_t u2[] = uR"*|*[a\
+const char16_t u2[] = uR"*|*(a\
 b
-c]"
-c]*|"
-c]*|*";
-const char16_t u3[] = u"ab\nc]\"\nc]*|\"\nc";
+c)"
+c)*|"
+c)*|*";
+const char16_t u3[] = u"ab\nc)\"\nc)*|\"\nc";
 
-const char32_t U0[] = UR"[a\
+const char32_t U0[] = UR"(a\
 \u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-c]";
+c)";
 const char32_t U1[] = U"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-const char32_t U2[] = UR"*|*[a\
+const char32_t U2[] = UR"*|*(a\
 b
-c]"
-c]*|"
-c]*|*";
-const char32_t U3[] = U"ab\nc]\"\nc]*|\"\nc";
+c)"
+c)*|"
+c)*|*";
+const char32_t U3[] = U"ab\nc)\"\nc)*|\"\nc";
 
-const wchar_t L0[] = LR"[a\
+const wchar_t L0[] = LR"(a\
 \u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb
-c]";
+c)";
 const wchar_t L1[] = L"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc";
-const wchar_t L2[] = LR"*|*[a\
+const wchar_t L2[] = LR"*|*(a\
 b
-c]"
-c]*|"
-c]*|*";
-const wchar_t L3[] = L"ab\nc]\"\nc]*|\"\nc";
+c)"
+c)*|"
+c)*|*";
+const wchar_t L3[] = L"ab\nc)\"\nc)*|\"\nc";
 
 int
 main (void)
@@ -89,8 +89,8 @@ main (void)
   if (sizeof (L2) != sizeof (L3)
       || __builtin_memcmp (L2, L3, sizeof (L2)) != 0)
     __builtin_abort ();
-  if (sizeof (R"*[]*") != 1
-      || __builtin_memcmp (R"*[]*", "", 1) != 0)
+  if (sizeof (R"*()*") != 1
+      || __builtin_memcmp (R"*()*", "", 1) != 0)
     __builtin_abort ();
   return 0;
 }
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-2.C b/gcc/testsuite/g++.dg/ext/raw-string-2.C
index c7eb602afecd..d2fe9aaff42b 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-2.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-2.C
@@ -11,48 +11,48 @@
 #define L
 #define LR
 
-const char s00[] = R"[a]" "[b]";
-const char s01[] = "[a]" R"*[b]*";
-const char s02[] = R"[a]" R"[b]";
-const char s03[] = R"-[a]-" u8"[b]";
-const char s04[] = "[a]" u8R"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-const char s05[] = R"[a]" u8R"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-const char s06[] = u8R";([a];(" "[b]";
-const char s07[] = u8"[a]" R"[b]";
-const char s08[] = u8R"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-const char s09[] = u8R"/^&|~!=,"'\[a]/^&|~!=,"'\" u8"[b]";
-const char s10[] = u8"[a]" u8R"0123456789abcdef[b]0123456789abcdef";
-const char s11[] = u8R"ghijklmnopqrstuv[a]ghijklmnopqrstuv" u8R"w[b]w";
+const char s00[] = R"(a)" "(b)";
+const char s01[] = "(a)" R"*(b)*";
+const char s02[] = R"(a)" R"(b)";
+const char s03[] = R"-(a)-" u8"(b)";
+const char s04[] = "(a)" u8R"MNOPQRSTUVWXYZ(b)MNOPQRSTUVWXYZ";
+const char s05[] = R"(a)" u8R"wxyzABCDEFGHIJKL(b)wxyzABCDEFGHIJKL";
+const char s06[] = u8R";[(a);[" "(b)";
+const char s07[] = u8"(a)" R"(b)";
+const char s08[] = u8R"(a)" R"_{}#[]<>%:;.?*+-(b)_{}#[]<>%:;.?*+-";
+const char s09[] = u8R"/^&|~!=,"'(a)/^&|~!=,"'" u8"(b)";
+const char s10[] = u8"(a)" u8R"0123456789abcdef(b)0123456789abcdef";
+const char s11[] = u8R"ghijklmnopqrstuv(a)ghijklmnopqrstuv" u8R"w(b)w";
 
-const char16_t u03[] = R"-[a]-" u"[b]";
-const char16_t u04[] = "[a]" uR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-const char16_t u05[] = R"[a]" uR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-const char16_t u06[] = uR";([a];(" "[b]";
-const char16_t u07[] = u"[a]" R"[b]";
-const char16_t u08[] = uR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-const char16_t u09[] = uR"/^&|~!=,"'\[a]/^&|~!=,"'\" u"[b]";
-const char16_t u10[] = u"[a]" uR"0123456789abcdef[b]0123456789abcdef";
-const char16_t u11[] = uR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" uR"w[b]w";
+const char16_t u03[] = R"-(a)-" u"(b)";
+const char16_t u04[] = "(a)" uR"MNOPQRSTUVWXYZ(b)MNOPQRSTUVWXYZ";
+const char16_t u05[] = R"(a)" uR"wxyzABCDEFGHIJKL(b)wxyzABCDEFGHIJKL";
+const char16_t u06[] = uR";[(a);[" "(b)";
+const char16_t u07[] = u"(a)" R"(b)";
+const char16_t u08[] = uR"(a)" R"_{}#[]<>%:;.?*+-(b)_{}#[]<>%:;.?*+-";
+const char16_t u09[] = uR"/^&|~!=,"'(a)/^&|~!=,"'" u"(b)";
+const char16_t u10[] = u"(a)" uR"0123456789abcdef(b)0123456789abcdef";
+const char16_t u11[] = uR"ghijklmnopqrstuv(a)ghijklmnopqrstuv" uR"w(b)w";
 
-const char32_t U03[] = R"-[a]-" U"[b]";
-const char32_t U04[] = "[a]" UR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-const char32_t U05[] = R"[a]" UR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-const char32_t U06[] = UR";([a];(" "[b]";
-const char32_t U07[] = U"[a]" R"[b]";
-const char32_t U08[] = UR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-const char32_t U09[] = UR"/^&|~!=,"'\[a]/^&|~!=,"'\" U"[b]";
-const char32_t U10[] = U"[a]" UR"0123456789abcdef[b]0123456789abcdef";
-const char32_t U11[] = UR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" UR"w[b]w";
+const char32_t U03[] = R"-(a)-" U"(b)";
+const char32_t U04[] = "(a)" UR"MNOPQRSTUVWXYZ(b)MNOPQRSTUVWXYZ";
+const char32_t U05[] = R"(a)" UR"wxyzABCDEFGHIJKL(b)wxyzABCDEFGHIJKL";
+const char32_t U06[] = UR";[(a);[" "(b)";
+const char32_t U07[] = U"(a)" R"(b)";
+const char32_t U08[] = UR"(a)" R"_{}#[]<>%:;.?*+-(b)_{}#[]<>%:;.?*+-";
+const char32_t U09[] = UR"/^&|~!=,"'(a)/^&|~!=,"'" U"(b)";
+const char32_t U10[] = U"(a)" UR"0123456789abcdef(b)0123456789abcdef";
+const char32_t U11[] = UR"ghijklmnopqrstuv(a)ghijklmnopqrstuv" UR"w(b)w";
 
-const wchar_t L03[] = R"-[a]-" L"[b]";
-const wchar_t L04[] = "[a]" LR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ";
-const wchar_t L05[] = R"[a]" LR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL";
-const wchar_t L06[] = LR";([a];(" "[b]";
-const wchar_t L07[] = L"[a]" R"[b]";
-const wchar_t L08[] = LR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-";
-const wchar_t L09[] = LR"/^&|~!=,"'\[a]/^&|~!=,"'\" L"[b]";
-const wchar_t L10[] = L"[a]" LR"0123456789abcdef[b]0123456789abcdef";
-const wchar_t L11[] = LR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" LR"w[b]w";
+const wchar_t L03[] = R"-(a)-" L"(b)";
+const wchar_t L04[] = "(a)" LR"MNOPQRSTUVWXYZ(b)MNOPQRSTUVWXYZ";
+const wchar_t L05[] = R"(a)" LR"wxyzABCDEFGHIJKL(b)wxyzABCDEFGHIJKL";
+const wchar_t L06[] = LR";[(a);[" "(b)";
+const wchar_t L07[] = L"(a)" R"(b)";
+const wchar_t L08[] = LR"(a)" R"_{}#[]<>%:;.?*+-(b)_{}#[]<>%:;.?*+-";
+const wchar_t L09[] = LR"/^&|~!=,"'(a)/^&|~!=,"'" L"(b)";
+const wchar_t L10[] = L"(a)" LR"0123456789abcdef(b)0123456789abcdef";
+const wchar_t L11[] = LR"ghijklmnopqrstuv(a)ghijklmnopqrstuv" LR"w(b)w";
 
 int
 main (void)
@@ -61,44 +61,44 @@ main (void)
   if (sizeof (str) != sizeof (val) \
       || __builtin_memcmp (str, val, sizeof (str)) != 0) \
     __builtin_abort ()
-  TEST (s00, "a[b]");
-  TEST (s01, "[a]b");
+  TEST (s00, "a(b)");
+  TEST (s01, "(a)b");
   TEST (s02, "ab");
-  TEST (s03, "a[b]");
-  TEST (s04, "[a]b");
+  TEST (s03, "a(b)");
+  TEST (s04, "(a)b");
   TEST (s05, "ab");
-  TEST (s06, "a[b]");
-  TEST (s07, "[a]b");
+  TEST (s06, "a(b)");
+  TEST (s07, "(a)b");
   TEST (s08, "ab");
-  TEST (s09, "a[b]");
-  TEST (s10, "[a]b");
+  TEST (s09, "a(b)");
+  TEST (s10, "(a)b");
   TEST (s11, "ab");
-  TEST (u03, u"a[b]");
-  TEST (u04, u"[a]b");
+  TEST (u03, u"a(b)");
+  TEST (u04, u"(a)b");
   TEST (u05, u"ab");
-  TEST (u06, u"a[b]");
-  TEST (u07, u"[a]b");
+  TEST (u06, u"a(b)");
+  TEST (u07, u"(a)b");
   TEST (u08, u"ab");
-  TEST (u09, u"a[b]");
-  TEST (u10, u"[a]b");
+  TEST (u09, u"a(b)");
+  TEST (u10, u"(a)b");
   TEST (u11, u"ab");
-  TEST (U03, U"a[b]");
-  TEST (U04, U"[a]b");
+  TEST (U03, U"a(b)");
+  TEST (U04, U"(a)b");
   TEST (U05, U"ab");
-  TEST (U06, U"a[b]");
-  TEST (U07, U"[a]b");
+  TEST (U06, U"a(b)");
+  TEST (U07, U"(a)b");
   TEST (U08, U"ab");
-  TEST (U09, U"a[b]");
-  TEST (U10, U"[a]b");
+  TEST (U09, U"a(b)");
+  TEST (U10, U"(a)b");
   TEST (U11, U"ab");
-  TEST (L03, L"a[b]");
-  TEST (L04, L"[a]b");
+  TEST (L03, L"a(b)");
+  TEST (L04, L"(a)b");
   TEST (L05, L"ab");
-  TEST (L06, L"a[b]");
-  TEST (L07, L"[a]b");
+  TEST (L06, L"a(b)");
+  TEST (L07, L"(a)b");
   TEST (L08, L"ab");
-  TEST (L09, L"a[b]");
-  TEST (L10, L"[a]b");
+  TEST (L09, L"a(b)");
+  TEST (L10, L"(a)b");
   TEST (L11, L"ab");
   return 0;
 }
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-3.C b/gcc/testsuite/g++.dg/ext/raw-string-3.C
index 46c486209050..bb2e0c71b55b 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-3.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-3.C
@@ -3,15 +3,15 @@
 // { dg-do compile }
 // { dg-options "-std=c++98" }
 
-const void	*s0	= R"[a]";	// { dg-error "was not declared" }
+const void	*s0	= R"(a)";	// { dg-error "was not declared" }
 		// { dg-error "expected ',' or ';'" "" { target *-*-* } 6 }
-const void	*s1	= uR"[a]";	// { dg-error "was not declared" }
+const void	*s1	= uR"(a)";	// { dg-error "was not declared" }
 		// { dg-error "expected ',' or ';'" "" { target *-*-* } 8 }
-const void	*s2	= UR"[a]";	// { dg-error "was not declared" }
+const void	*s2	= UR"(a)";	// { dg-error "was not declared" }
 		// { dg-error "expected ',' or ';'" "" { target *-*-* } 10 }
-const void	*s3	= u8R"[a]";	// { dg-error "was not declared" }
+const void	*s3	= u8R"(a)";	// { dg-error "was not declared" }
 		// { dg-error "expected ',' or ';'" "" { target *-*-* } 12 }
-const void	*s4	= LR"[a]";	// { dg-error "was not declared" }
+const void	*s4	= LR"(a)";	// { dg-error "was not declared" }
 		// { dg-error "expected ',' or ';'" "" { target *-*-* } 14 }
 
 const int	i0	= R'a';	// { dg-error "was not declared" }
@@ -31,11 +31,11 @@ const int	i4	= LR'a';	// { dg-error "was not declared" }
 #define u8R	"d"
 #define LR	"e"
 
-const void	*s5	= R"[a]";
-const void	*s6	= uR"[a]";
-const void	*s7	= UR"[a]";
-const void	*s8	= u8R"[a]";
-const void	*s9	= LR"[a]";
+const void	*s5	= R"(a)";
+const void	*s6	= uR"(a)";
+const void	*s7	= UR"(a)";
+const void	*s8	= u8R"(a)";
+const void	*s9	= LR"(a)";
 
 #undef R
 #undef uR
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-5.C b/gcc/testsuite/g++.dg/ext/raw-string-5.C
index b815eb23b165..3808fcffea2c 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-5.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-5.C
@@ -1,23 +1,26 @@
 // { dg-do compile }
 // { dg-options "-std=c++0x" }
 
-const void *s0 = R"0123456789abcdefg[]0123456789abcdefg";
+const void *s0 = R"0123456789abcdefg()0123456789abcdefg";
 	// { dg-error "raw string delimiter longer" "" { target *-*-* } 4 }
 	// { dg-error "stray" "" { target *-*-* } 4 }
-const void *s1 = R" [] ";
+const void *s1 = R" () ";
 	// { dg-error "invalid character" "" { target *-*-* } 7 }
 	// { dg-error "stray" "" { target *-*-* } 7 }
-const void *s2 = R"	[]	";
+const void *s2 = R"	()	";
 	// { dg-error "invalid character" "" { target *-*-* } 10 }
 	// { dg-error "stray" "" { target *-*-* } 10 }
-const void *s3 = R"][]]";
+const void *s3 = R")())";
 	// { dg-error "invalid character" "" { target *-*-* } 13 }
 	// { dg-error "stray" "" { target *-*-* } 13 }
-const void *s4 = R"@[]@";
+const void *s4 = R"@()@";
 	// { dg-error "invalid character" "" { target *-*-* } 16 }
 	// { dg-error "stray" "" { target *-*-* } 16 }
-const void *s5 = R"$[]$";
+const void *s5 = R"$()$";
 	// { dg-error "invalid character" "" { target *-*-* } 19 }
 	// { dg-error "stray" "" { target *-*-* } 19 }
+const void *s6 = R"\u0010()\u0010";
+	// { dg-error "invalid character" "" { target *-*-* } 22 }
+	// { dg-error "stray" "" { target *-*-* } 22 }
 
 int main () {}
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-6.C b/gcc/testsuite/g++.dg/ext/raw-string-6.C
index a97d95d56938..7906d40a1b08 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-6.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-6.C
@@ -1,5 +1,5 @@
 // { dg-do compile }
 // { dg-options "-std=c++0x" }
 
-const void *s0 = R"ouch[]ouCh";	// { dg-error "at end of input" }
+const void *s0 = R"ouch()ouCh";	// { dg-error "at end of input" }
 	// { dg-error "unterminated raw string" "" { target *-*-* } 4 }
diff --git a/gcc/testsuite/g++.dg/ext/raw-string-7.C b/gcc/testsuite/g++.dg/ext/raw-string-7.C
index 0f479193433d..24737bc2865d 100644
--- a/gcc/testsuite/g++.dg/ext/raw-string-7.C
+++ b/gcc/testsuite/g++.dg/ext/raw-string-7.C
@@ -4,13 +4,13 @@
 // { dg-options "-std=c++0x" }
 
 // Note, there is a single space after \ on the following line.
-const char *s0 = R"[\ 
-]";
+const char *s0 = R"(\ 
+)";
 // { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 7 }
 
 // Note, there is a single tab after \ on the following line.
-const char *s1 = R"[\	
-]";
+const char *s1 = R"(\	
+)";
 // { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 12 }
 
 int
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index eeab5699bcae..24030fb4c8a3 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-29  Jason Merrill  <jason@redhat.com>
+
+	Some raw string changes from N3077
+	* charset.c (cpp_interpret_string): Change inner delimiters to ().
+	* lex.c (lex_raw_string): Likewise.  Also disallow '\' in delimiter.
+
 2010-02-11  Jakub Jelinek  <jakub@redhat.com>
 
 	* init.c (read_original_filename): Don't call read_original_directory
diff --git a/libcpp/charset.c b/libcpp/charset.c
index 837ccd77aab1..282430fe9ed5 100644
--- a/libcpp/charset.c
+++ b/libcpp/charset.c
@@ -1396,7 +1396,7 @@ cpp_interpret_string (cpp_reader *pfile, const cpp_string *from, size_t count,
 	  /* Skip over 'R"'.  */
 	  p += 2;
 	  prefix = p;
-	  while (*p != '[')
+	  while (*p != '(')
 	    p++;
 	  p++;
 	  limit = from[i].text + from[i].len;
diff --git a/libcpp/lex.c b/libcpp/lex.c
index ac28f92e6409..74deab20608e 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -703,7 +703,7 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
     {
       switch (raw_prefix[raw_prefix_len])
 	{
-	case ' ': case '[': case ']': case '\t':
+	case ' ': case '(': case ')': case '\\': case '\t':
 	case '\v': case '\f': case '\n': default:
 	  break;
 	/* Basic source charset except the above chars.  */
@@ -719,18 +719,18 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
 	case 'Y': case 'Z':
 	case '0': case '1': case '2': case '3': case '4': case '5':
 	case '6': case '7': case '8': case '9':
-	case '_': case '{': case '}': case '#': case '(': case ')':
+	case '_': case '{': case '}': case '#': case '[': case ']':
 	case '<': case '>': case '%': case ':': case ';': case '.':
 	case '?': case '*': case '+': case '-': case '/': case '^':
 	case '&': case '|': case '~': case '!': case '=': case ',':
-	case '\\': case '"': case '\'':
+	case '"': case '\'':
 	  raw_prefix_len++;
 	  continue;
 	}
       break;
     }
 
-  if (raw_prefix[raw_prefix_len] != '[')
+  if (raw_prefix[raw_prefix_len] != '(')
     {
       int col = CPP_BUF_COLUMN (pfile->buffer, raw_prefix + raw_prefix_len)
 		+ 1;
@@ -751,7 +751,7 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
     {
       cppchar_t c = *cur++;
 
-      if (c == ']'
+      if (c == ')'
 	  && strncmp ((const char *) cur, (const char *) raw_prefix,
 		      raw_prefix_len) == 0
 	  && cur[raw_prefix_len] == '"')
-- 
GitLab