]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR preprocessor/57757 (CPP extra inserted whitespace needs to be reviewed for...
authorJakub Jelinek <jakub@redhat.com>
Wed, 10 Jul 2013 16:40:49 +0000 (18:40 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 10 Jul 2013 16:40:49 +0000 (18:40 +0200)
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

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp/paste1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp/paste2.C [new file with mode: 0644]
libcpp/ChangeLog
libcpp/lex.c

index 1b4e046c43947ad5461252bbba163dec340a6215..82502f5f9015f938b8d88929dcbb8fec10b708cd 100644 (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.
diff --git a/gcc/testsuite/g++.dg/cpp/paste1.C b/gcc/testsuite/g++.dg/cpp/paste1.C
new file mode 100644 (file)
index 0000000..a33fdf5
--- /dev/null
@@ -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 (file)
index 0000000..89a659e
--- /dev/null
@@ -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);
+}
index 0cf9100cf62f5f6a0f282bdae2b660a45d1c1e41..d0c583d86913b48d0467e12a94143f008a344b12 100644 (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
index 022d31016e221ed3114b711d8a0edff77bbdb49c..dc7b9c17ddc3961a5ee8a500ab78d6e24029e69a 100644 (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;
     }