OSDN Git Service

libcpp:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 29 Nov 2008 12:21:10 +0000 (12:21 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 29 Nov 2008 12:21:10 +0000 (12:21 +0000)
* lex.c (cpp_token_len): Use 6 as default length.

gcc/testsuite:
* g++.dg/cpp/stringop-1.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142275 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 707a959..a871040 100644 (file)
@@ -1,3 +1,7 @@
+2008-11-29  Joseph Myers  <joseph@codesourcery.com>
+
+       * g++.dg/cpp/stringop-1.C: New test.
+
 2008-11-29  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/test_version.adb: Adjust to new string length.
diff --git a/gcc/testsuite/g++.dg/cpp/stringop-1.C b/gcc/testsuite/g++.dg/cpp/stringop-1.C
new file mode 100644 (file)
index 0000000..071a100
--- /dev/null
@@ -0,0 +1,29 @@
+/* Test for buffer overrun stringizing named operators longer than 4
+   characters.  */
+/* { dg-do compile } */
+
+#define str(x) #x
+#define var(v,a,b,c,d) static const char v##a##b##c##d[] = str(xor_eq)
+#define var1(v,a,b,c)                                                  \
+  var(v,a,b,c,0); var(v,a,b,c,1); var(v,a,b,c,2); var(v,a,b,c,3);      \
+  var(v,a,b,c,4); var(v,a,b,c,5); var(v,a,b,c,6); var(v,a,b,c,7);      \
+  var(v,a,b,c,8); var(v,a,b,c,9)
+#define var2(v,a,b)                                            \
+  var1(v,a,b,0); var1(v,a,b,1); var1(v,a,b,2); var1(v,a,b,3);  \
+  var1(v,a,b,4); var1(v,a,b,5); var1(v,a,b,6); var1(v,a,b,7);  \
+  var1(v,a,b,8); var1(v,a,b,9)
+#define var3(v,a)                                      \
+  var2(v,a,0); var2(v,a,1); var2(v,a,2); var2(v,a,3);  \
+  var2(v,a,4); var2(v,a,5); var2(v,a,6); var2(v,a,7);  \
+  var2(v,a,8); var2(v,a,9)
+
+var3(v,0);
+var3(v,1);
+var3(v,2);
+var3(v,3);
+var3(v,4);
+var3(v,5);
+var3(v,6);
+var3(v,7);
+var3(v,8);
+var3(v,9);
index 1d0d28c..9f6148e 100644 (file)
@@ -1,3 +1,7 @@
+2008-11-29  Joseph Myers  <joseph@codesourcery.com>
+
+       * lex.c (cpp_token_len): Use 6 as default length.
+
 2008-10-31  Manuel López-Ibáñez  <manu@gcc.gnu.org>
 
        * expr.c (struct op): Add location.
index 57364f0..96d1a99 100644 (file)
@@ -1362,7 +1362,7 @@ cpp_token_len (const cpp_token *token)
 
   switch (TOKEN_SPELL (token))
     {
-    default:           len = 4;                                break;
+    default:           len = 6;                                break;
     case SPELL_LITERAL:        len = token->val.str.len;               break;
     case SPELL_IDENT:  len = NODE_LEN (token->val.node) * 10;  break;
     }