re PR preprocessor/22042 (stringification BUG)

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.

From-SVN: r106463
This commit is contained in:
Andrew Pinski 2005-11-04 00:23:01 +00:00 committed by Andrew Pinski
parent abe60efd4b
commit 651ed94280
4 changed files with 42 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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