mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-13 11:50:34 +08:00
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:
parent
abe60efd4b
commit
651ed94280
@ -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
|
||||
|
25
gcc/testsuite/gcc.dg/cpp/strify4.c
Normal file
25
gcc/testsuite/gcc.dg/cpp/strify4.c
Normal 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;
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user