re PR preprocessor/57757 (CPP extra inserted whitespace needs to be reviewed for C++11 user-defined literals)

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_.

	* g++.dg/cpp/paste1.C: New test.
	* g++.dg/cpp/paste2.C: New test.

From-SVN: r200875
This commit is contained in:
Jakub Jelinek 2013-07-10 18:40:49 +02:00 committed by Jakub Jelinek
parent bb6f2bacbb
commit 87e356bada
5 changed files with 52 additions and 0 deletions

View File

@ -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.

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}