From cc9012f7c74cf3452cdb1b6cde3cf6455e889cd3 Mon Sep 17 00:00:00 2001
From: pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 4 Nov 2005 00:23:01 +0000
Subject: [PATCH] 2005-11-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR preprocessor/22042
        * macro.c (_cpp_builtin_macro_text): Lower the needed max
        buffer size.
        (cpp_quote_string): Don't octalify non printable
        charactors.
2005-11-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR preprocessor/22042
        * gcc.dg/cpp/strify4.c: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106463 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/testsuite/ChangeLog            |  5 +++++
 gcc/testsuite/gcc.dg/cpp/strify4.c | 25 +++++++++++++++++++++++++
 libcpp/ChangeLog                   |  8 ++++++++
 libcpp/macro.c                     | 17 ++++-------------
 4 files changed, 42 insertions(+), 13 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/cpp/strify4.c

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 49d41e153e35..722318fdaec9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR preprocessor/22042
+	* gcc.dg/cpp/strify4.c: New test.
+
 2005-11-03  Joseph S. Myers  <joseph@codesourcery.com>
 
 	PR c++/17964
diff --git a/gcc/testsuite/gcc.dg/cpp/strify4.c b/gcc/testsuite/gcc.dg/cpp/strify4.c
new file mode 100644
index 000000000000..b8b2f11e9d11
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/strify4.c
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* Tests we stringify without changing unprintable characts.  
+
+   Andrew Pinski */
+
+extern int strcmp (const char *, const char *);
+extern int puts (const char *);
+extern void abort (void);
+#define err(str) do { puts(str); abort(); } while (0)
+
+
+#define S(X) S2(X)
+#define S2(X) #X
+#define TAB "	" /* Note there is a tab character here. */
+
+int main (int argc, char *argv[])
+{
+  /* The space before "bar" here is vital.  */
+  char a[] = S(S(TAB));
+
+  if (strcmp (a, "\"\\\"	\\\"\""))
+    err ("stringification caused octal");
+
+  return 0;
+}
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index c0364802678b..3a489b4c1c0b 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,11 @@
+2005-11-03  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR preprocessor/22042
+	* macro.c (_cpp_builtin_macro_text): Lower the needed max
+	buffer size.
+	(cpp_quote_string): Don't octalify non printable
+	charactors.
+
 2005-11-03  Joseph S. Myers  <joseph@codesourcery.com>
 
 	PR c++/17964
diff --git a/libcpp/macro.c b/libcpp/macro.c
index 13f5c7680902..a0aa93ea994a 100644
--- a/libcpp/macro.c
+++ b/libcpp/macro.c
@@ -139,7 +139,7 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
 
 	name = map->to_file;
 	len = strlen (name);
-	buf = _cpp_unaligned_alloc (pfile, len * 4 + 3);
+	buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
 	result = buf;
 	*buf = '"';
 	buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
@@ -292,9 +292,8 @@ builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
 }
 
 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
-   backslashes and double quotes.  Non-printable characters are
-   converted to octal.  DEST must be of sufficient size.  Returns
-   a pointer to the end of the string.  */
+   backslashes and double quotes. DEST must be of sufficient size.
+   Returns a pointer to the end of the string.  */
 uchar *
 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
 {
@@ -308,15 +307,7 @@ cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
 	  *dest++ = c;
 	}
       else
-	{
-	  if (ISPRINT (c))
-	    *dest++ = c;
-	  else
-	    {
-	      sprintf ((char *) dest, "\\%03o", c);
-	      dest += 4;
-	    }
-	}
+	  *dest++ = c;
     }
 
   return dest;
-- 
GitLab