Upstream-Status: Inappropriate [Backport] From c6deb5c58fde1c5115d9e92afb2ead8e7ac4fea0 Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 23 Apr 2011 23:33:39 +0000 Subject: [PATCH 174/200] PR preprocessor/48740 * lex.c (lex_raw_string): When raw string ends with ??) followed by raw prefix and ", ensure it is preprocessed with ??) rather than ??]. * c-c++-common/raw-string-11.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172904 138bc75d-0d04-0410-961f-82ee72b054a4 new file mode 100644 index 0000000..49ceba2 --- /dev/null +++ b/gcc/testsuite/c-c++-common/raw-string-11.c @@ -0,0 +1,13 @@ +// PR preprocessor/48740 +// { dg-options "-std=gnu99 -trigraphs -save-temps" { target c } } +// { dg-options "-std=c++0x -save-temps" { target c++ } } +// { dg-do run } + +int main () +{ + return __builtin_memcmp (R"raw(foo%sbar%sfred%sbob?????)raw", + "foo%sbar%sfred%sbob?""?""?""?""?", + sizeof ("foo%sbar%sfred%sbob?""?""?""?""?")); +} + +// { dg-final { cleanup-saved-temps } } index c9b5c95..3bf4886 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -1410,7 +1410,9 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base, raw_prefix_len) == 0 && cur[raw_prefix_len+1] == '"') { - cur += raw_prefix_len+2; + BUF_APPEND (")", 1); + base++; + cur += raw_prefix_len + 2; goto break_outer_loop; } else -- 1.7.0.4