Commit 767d412c by Jason Merrill

(special_symbol): Don't copy simple strings, use wchar_type.

        (main): Setup wchar_type for C++ if needed.
        (initialize_builtins): Use wchar_type.

From-SVN: r7212
parent d94d2abc
...@@ -826,23 +826,25 @@ static char *predefs = ""; ...@@ -826,23 +826,25 @@ static char *predefs = "";
it would be best to do something here to figure out automatically it would be best to do something here to figure out automatically
from other information what type to use. */ from other information what type to use. */
/* The string value for __size_type__. */ /* The string value for __SIZE_TYPE__. */
#ifndef SIZE_TYPE #ifndef SIZE_TYPE
#define SIZE_TYPE "long unsigned int" #define SIZE_TYPE "long unsigned int"
#endif #endif
/* The string value for __ptrdiff_type__. */ /* The string value for __PTRDIFF_TYPE__. */
#ifndef PTRDIFF_TYPE #ifndef PTRDIFF_TYPE
#define PTRDIFF_TYPE "long int" #define PTRDIFF_TYPE "long int"
#endif #endif
/* The string value for __wchar_type__. */ /* The string value for __WCHAR_TYPE__. */
#ifndef WCHAR_TYPE #ifndef WCHAR_TYPE
#define WCHAR_TYPE "int" #define WCHAR_TYPE "int"
#endif #endif
char * wchar_type = WCHAR_TYPE;
#undef WCHAR_TYPE
/* The string value for __USER_LABEL_PREFIX__ */ /* The string value for __USER_LABEL_PREFIX__ */
...@@ -1604,6 +1606,11 @@ main (argc, argv) ...@@ -1604,6 +1606,11 @@ main (argc, argv)
fp->nominal_fname = fp->fname = in_fname; fp->nominal_fname = fp->fname = in_fname;
fp->lineno = 0; fp->lineno = 0;
/* In C++, wchar_t is a distinct basic type, and we can expect
__wchar_t to be defined by cc1plus. */
if (cplusplus)
wchar_type = "__wchar_t";
/* Install __LINE__, etc. Must follow initialize_char_syntax /* Install __LINE__, etc. Must follow initialize_char_syntax
and option processing. */ and option processing. */
initialize_builtins (fp, &outbuf); initialize_builtins (fp, &outbuf);
...@@ -3825,38 +3832,26 @@ special_symbol (hp, op) ...@@ -3825,38 +3832,26 @@ special_symbol (hp, op)
#ifndef NO_BUILTIN_SIZE_TYPE #ifndef NO_BUILTIN_SIZE_TYPE
case T_SIZE_TYPE: case T_SIZE_TYPE:
buf = (char *) alloca (3 + strlen (SIZE_TYPE)); buf = SIZE_TYPE;
sprintf (buf, "%s", SIZE_TYPE);
break; break;
#endif #endif
#ifndef NO_BUILTIN_PTRDIFF_TYPE #ifndef NO_BUILTIN_PTRDIFF_TYPE
case T_PTRDIFF_TYPE: case T_PTRDIFF_TYPE:
buf = (char *) alloca (3 + strlen (PTRDIFF_TYPE)); buf = PTRDIFF_TYPE;
sprintf (buf, "%s", PTRDIFF_TYPE);
break; break;
#endif #endif
case T_WCHAR_TYPE: case T_WCHAR_TYPE:
/* In C++, wchar_t is a distinct basic type, and we can expect buf = wchar_type;
__wchar_t to be defined by cc1plus. */
if (cplusplus)
buf = "__wchar_t";
else
{
buf = (char *) alloca (3 + strlen (WCHAR_TYPE));
sprintf (buf, "%s", WCHAR_TYPE);
}
break; break;
case T_USER_LABEL_PREFIX_TYPE: case T_USER_LABEL_PREFIX_TYPE:
buf = (char *) alloca (3 + strlen (USER_LABEL_PREFIX)); buf = USER_LABEL_PREFIX;
sprintf (buf, "%s", USER_LABEL_PREFIX);
break; break;
case T_REGISTER_PREFIX_TYPE: case T_REGISTER_PREFIX_TYPE:
buf = (char *) alloca (3 + strlen (REGISTER_PREFIX)); buf = REGISTER_PREFIX;
sprintf (buf, "%s", REGISTER_PREFIX);
break; break;
case T_CONST: case T_CONST:
...@@ -8986,7 +8981,7 @@ initialize_builtins (inp, outp) ...@@ -8986,7 +8981,7 @@ initialize_builtins (inp, outp)
pass_thru_directive (directive, &directive[strlen (directive)], outp, dp); pass_thru_directive (directive, &directive[strlen (directive)], outp, dp);
#endif #endif
sprintf (directive, " __WCHAR_TYPE__ %s\n", WCHAR_TYPE); sprintf (directive, " __WCHAR_TYPE__ %s\n", wchar_type);
output_line_command (inp, outp, 0, same_file); output_line_command (inp, outp, 0, same_file);
pass_thru_directive (directive, &directive[strlen (directive)], outp, dp); pass_thru_directive (directive, &directive[strlen (directive)], outp, dp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment