diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1b4e046c43947ad5461252bbba163dec340a6215..82502f5f9015f938b8d88929dcbb8fec10b708cd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,11 @@ +2013-07-10 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/57757 + * g++.dg/cpp/paste1.C: New test. + * g++.dg/cpp/paste2.C: New test. + 2013-07-10 Graham Stott <grahams@btinternet.com> + * gcc.target/mips/mulsize-1.c: New. * gcc.target/mips/mulsize-2.c: New. * gcc.target/mips/mulsize-3.c: New. diff --git a/gcc/testsuite/g++.dg/cpp/paste1.C b/gcc/testsuite/g++.dg/cpp/paste1.C new file mode 100644 index 0000000000000000000000000000000000000000..a33fdf5c436a64cc89d29a9c9e0d76159fb24760 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/paste1.C @@ -0,0 +1,14 @@ +// PR preprocessor/57757 +// { dg-do compile } +// { dg-options "-std=c++11" } + +#define S(x) x +extern S("C")void exit (int); +int +main () +{ + (void) (S("foo")and 0); + const wchar_t *p = S(L"foo")L"bar"; + const char *a = S("foo")R"(bar)"; + exit (0); +} diff --git a/gcc/testsuite/g++.dg/cpp/paste2.C b/gcc/testsuite/g++.dg/cpp/paste2.C new file mode 100644 index 0000000000000000000000000000000000000000..89a659e6bb9561f70b2410625d2e965ef696ac2e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/paste2.C @@ -0,0 +1,15 @@ +// PR preprocessor/57757 +// { dg-do compile } +// { dg-options "-std=c++11 -save-temps" } +// { dg-final cleanup-saved-temps } + +#define S(x) x +extern S("C")void exit (int); +int +main () +{ + (void) (S("foo")and 0); + const wchar_t *p = S(L"foo")L"bar"; + const char *a = S("foo")R"(bar)"; + exit (0); +} diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 0cf9100cf62f5f6a0f282bdae2b660a45d1c1e41..d0c583d86913b48d0467e12a94143f008a344b12 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,10 @@ +2013-07-10 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/57757 + * lex.c (cpp_avoid_paste): Avoid pasting CPP_{,W,UTF8}STRING + or CPP_STRING{16,32} with CPP_NAME or SPELL_LITERAL token that + starts if a-zA-Z_. + 2013-06-28 Ed Smith-Rowland <3dw4rd@verizon.net> * lex.c (lex_raw_string(), lex_string()): Constrain suffixes treated diff --git a/libcpp/lex.c b/libcpp/lex.c index 022d31016e221ed3114b711d8a0edff77bbdb49c..dc7b9c17ddc3961a5ee8a500ab78d6e24029e69a 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -2767,6 +2767,15 @@ cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1, || (CPP_OPTION (pfile, objc) && token1->val.str.text[0] == '@' && (b == CPP_NAME || b == CPP_STRING))); + case CPP_STRING: + case CPP_WSTRING: + case CPP_UTF8STRING: + case CPP_STRING16: + case CPP_STRING32: return (CPP_OPTION (pfile, user_literals) + && (b == CPP_NAME + || (TOKEN_SPELL (token2) == SPELL_LITERAL + && ISIDST (token2->val.str.text[0])))); + default: break; }