From 521506258fa5b6b57a50b0570d8208894ed19f79 Mon Sep 17 00:00:00 2001 From: Jason Merrill 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 e429f26..e2fd72e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2010-03-29 Jason Merrill + + 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 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 0e8abf8..c2426d5 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 c7eb602..d2fe9aa 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 46c4862..bb2e0c7 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 b815eb2..3808fcf 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 a97d95d..7906d40 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 0f47919..24737bc 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 eeab569..24030fb 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2010-03-29 Jason Merrill + + 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 * init.c (read_original_filename): Don't call read_original_directory diff --git a/libcpp/charset.c b/libcpp/charset.c index 837ccd7..282430f 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 ac28f92..74deab2 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] == '"') -- 2.7.4