aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1999-09-23 21:03:53 +0000
committerJason Merrill <jason@gcc.gnu.org>1999-09-23 17:03:53 -0400
commit12a39b12648fdd1675757518450720d16ef24793 (patch)
treef1348bbe949f8cba90abd610eefdbe630bdaa2c1
parente689ae67255aca55fddb4b01b0b9ded6d3f151ea (diff)
downloadgcc-12a39b12648fdd1675757518450720d16ef24793.zip
gcc-12a39b12648fdd1675757518450720d16ef24793.tar.gz
gcc-12a39b12648fdd1675757518450720d16ef24793.tar.bz2
toplev.c (documented_lang_options): Add -fshort-wchar.
* toplev.c (documented_lang_options): Add -fshort-wchar. * c-decl.c (c_decode_option): Likewise. (init_decl_processing): If -fshort-wchar, use 'short unsigned int' for wchar_t. * c-common.c, c-lex.c: Get WCHAR_TYPE_SIZE from wchar_type_node. * gcc.c (default_compilers): If -fshort-wchar, override __WCHAR_TYPE__. * tm.texi (C Dialect Options): Add -fshort-wchar. From-SVN: r29638
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/c-common.c9
-rw-r--r--gcc/c-decl.c14
-rw-r--r--gcc/c-lex.c9
-rw-r--r--gcc/gcc.c8
-rw-r--r--gcc/toplev.c2
6 files changed, 35 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2f868d..aea059c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
Thu Sep 23 13:40:02 1999 Jason Merrill <jason@yorick.cygnus.com>
+ * toplev.c (documented_lang_options): Add -fshort-wchar.
+ * c-decl.c (c_decode_option): Likewise.
+ (init_decl_processing): If -fshort-wchar, use 'short unsigned int'
+ for wchar_t.
+ * c-common.c, c-lex.c: Get WCHAR_TYPE_SIZE from wchar_type_node.
+ * gcc.c (default_compilers): If -fshort-wchar,
+ override __WCHAR_TYPE__.
+ * tm.texi (C Dialect Options): Add -fshort-wchar.
+
* dwarf2out.c (output_aranges): Use DW_AT_location to find the
symbol for a variable.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index cd2baab..2fa89e6 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -38,13 +38,8 @@ cpp_options parse_options;
enum cpp_token cpp_token;
#endif
-#ifndef WCHAR_TYPE_SIZE
-#ifdef INT_TYPE_SIZE
-#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
-#else
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-#endif
-#endif
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
/* The following symbols are subsumed in the c_global_trees array, and
listed here individually for documentation purposes.
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 75b8ee0..b2f32c6 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -304,6 +304,10 @@ int flag_cond_mismatch;
int flag_short_double;
+/* Nonzero means give `wchar_t' the same size as `short'. */
+
+int flag_short_wchar;
+
/* Nonzero means don't recognize the keyword `asm'. */
int flag_no_asm;
@@ -580,6 +584,10 @@ c_decode_option (argc, argv)
flag_short_enums = 1;
else if (!strcmp (p, "-fno-short-enums"))
flag_short_enums = 0;
+ else if (!strcmp (p, "-fshort-wchar"))
+ flag_short_wchar = 1;
+ else if (!strcmp (p, "-fno-short-wchar"))
+ flag_short_wchar = 0;
else if (!strcmp (p, "-fcond-mismatch"))
flag_cond_mismatch = 1;
else if (!strcmp (p, "-fno-cond-mismatch"))
@@ -2984,8 +2992,10 @@ init_decl_processing ()
pushdecl (build_decl (TYPE_DECL,
ridpointers[(int) RID_VOID], void_type_node));
- wchar_type_node
- = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
+ wchar_type_node = get_identifier (flag_short_wchar
+ ? "short unsigned int"
+ : WCHAR_TYPE);
+ wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
wchar_type_size = TYPE_PRECISION (wchar_type_node);
signed_wchar_type_node = signed_type (wchar_type_node);
unsigned_wchar_type_node = unsigned_type (wchar_type_node);
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index bd171ab..55f9acb 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -135,13 +135,8 @@ extern int yydebug;
/* File used for outputting assembler code. */
extern FILE *asm_out_file;
-#ifndef WCHAR_TYPE_SIZE
-#ifdef INT_TYPE_SIZE
-#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
-#else
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-#endif
-#endif
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
/* Number of bytes in a wide character. */
#define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
diff --git a/gcc/gcc.c b/gcc/gcc.c
index aa98df0..343811f 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -610,6 +610,7 @@ static struct compiler default_compilers[] =
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{traditional} %{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
%{fleading-underscore} %{fno-leading-underscore}\
@@ -624,6 +625,8 @@ static struct compiler default_compilers[] =
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{H} %C %{D*} %{U*} %{i*} %Z\
%{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
@@ -646,6 +649,7 @@ static struct compiler default_compilers[] =
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{traditional} %{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
%{fleading-underscore} %{fno-leading-underscore}\
@@ -674,6 +678,7 @@ static struct compiler default_compilers[] =
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{traditional} %{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
%{fleading-underscore} %{fno-leading-underscore}\
@@ -691,6 +696,8 @@ static struct compiler default_compilers[] =
%{!undef:%{!std=*:%p}%{std=gnu*:%p} %P} %{trigraphs}\
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{traditional} %{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
%{fleading-underscore} %{fno-leading-underscore}\
@@ -720,6 +727,7 @@ static struct compiler default_compilers[] =
-$ %{!undef:%p %P} -D__ASSEMBLER__ \
%c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}}\
%{ffast-math:-D__FAST_MATH__}\
+ %{fshort-wchar:-D__WCHAR_TYPE__=short\\ unsigned\\ int}\
%{traditional} %{ftraditional:-traditional}\
%{traditional-cpp:-traditional}\
%{fleading-underscore} %{fno-leading-underscore}\
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 9f08f7d..a126de0 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1043,6 +1043,8 @@ documented_lang_options[] =
{ "-fno-short-double", "" },
{ "-fshort-enums", "Use the smallest fitting integer to hold enums"},
{ "-fno-short-enums", "" },
+ { "-fshort-wchar", "Override the underlying type for wchar_t to `unsigned short'" },
+ { "-fno-short-wchar", "" },
{ "-Wall", "Enable most warning messages" },
{ "-Wbad-function-cast",