summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-06-11 20:06:30 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-06-11 20:06:30 -0700
commit676997cfd2c72fe7a5fa815d78e8a7351072c7d4 (patch)
treea51f218e63a3e610ab83885e2934f450d9444946 /gcc
parent116b7a5ea82b371a114209bd6b277e72ece51bc1 (diff)
downloadgcc-676997cfd2c72fe7a5fa815d78e8a7351072c7d4.tar.gz
c-common.c (builtin_define_type_max): New.
* c-common.c (builtin_define_type_max): New. (cb_register_builtins): Define __SCHAR_MAX__, __SHRT_MAX__, __INT_MAX__, __LONG_MAX__, __LONG_LONG_MAX__, __CHAR_BIT__. From Joseph S. Myers: * glimits.h: Rewrite to expect the double underscore definitions from the compiler. * config/alpha/unicosmk.h, config/avr/avr.h, config/h8300/h8300.h, config/i386/linux64.h, config/ia64/aix.h, config/ia64/hpux.h, config/ia64/ia64.h, config/m68hc11/m68hc11.h, config/m68hc11/m68hc12.h, config/mips/mips.h, config/mmix/mmix.h, config/mn10200/mn10200.h, config/pa/pa.h, config/rs6000/aix43.h, config/rs6000/aix51.h, config/rs6000/linux64.h, config/s390/linux.h, config/sh/sh.h, config/stormy16/stormy16.h: Don't define any of __SHRT_MAX__, __INT_MAX__, __LONG_MAX__, or __LONG_LONG_MAX__. From-SVN: r54544
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog19
-rw-r--r--gcc/c-common.c62
-rw-r--r--gcc/config/alpha/unicosmk.h2
-rw-r--r--gcc/config/avr/avr.h4
-rw-r--r--gcc/config/h8300/h8300.h6
-rw-r--r--gcc/config/i386/linux64.h2
-rw-r--r--gcc/config/ia64/aix.h4
-rw-r--r--gcc/config/ia64/hpux.h2
-rw-r--r--gcc/config/ia64/ia64.h8
-rw-r--r--gcc/config/m68hc11/m68hc11.h4
-rw-r--r--gcc/config/m68hc11/m68hc12.h4
-rw-r--r--gcc/config/mips/mips.h3
-rw-r--r--gcc/config/mmix/mmix.h1
-rw-r--r--gcc/config/mn10200/mn10200.h2
-rw-r--r--gcc/config/pa/pa.h2
-rw-r--r--gcc/config/rs6000/aix43.h8
-rw-r--r--gcc/config/rs6000/aix51.h22
-rw-r--r--gcc/config/rs6000/linux64.h1
-rw-r--r--gcc/config/s390/linux.h2
-rw-r--r--gcc/config/sh/sh.h3
-rw-r--r--gcc/config/stormy16/stormy16.h2
-rw-r--r--gcc/glimits.h98
22 files changed, 152 insertions, 109 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 01d3cc680a6..85306407035 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,24 @@
2002-06-11 Richard Henderson <rth@redhat.com>
+ * c-common.c (builtin_define_type_max): New.
+ (cb_register_builtins): Define __SCHAR_MAX__, __SHRT_MAX__,
+ __INT_MAX__, __LONG_MAX__, __LONG_LONG_MAX__, __CHAR_BIT__.
+
+ From Joseph S. Myers:
+ * glimits.h: Rewrite to expect the double underscore definitions
+ from the compiler.
+
+ * config/alpha/unicosmk.h, config/avr/avr.h, config/h8300/h8300.h,
+ config/i386/linux64.h, config/ia64/aix.h, config/ia64/hpux.h,
+ config/ia64/ia64.h, config/m68hc11/m68hc11.h, config/m68hc11/m68hc12.h,
+ config/mips/mips.h, config/mmix/mmix.h, config/mn10200/mn10200.h,
+ config/pa/pa.h, config/rs6000/aix43.h, config/rs6000/aix51.h,
+ config/rs6000/linux64.h, config/s390/linux.h, config/sh/sh.h,
+ config/stormy16/stormy16.h: Don't define any of __SHRT_MAX__,
+ __INT_MAX__, __LONG_MAX__, or __LONG_LONG_MAX__.
+
+2002-06-11 Richard Henderson <rth@redhat.com>
+
* config/alpha/alpha.c (ALPHA_BUILTIN_THREAD_POINTER): New.
(ALPHA_BUILTIN_SET_THREAD_POINTER): New.
(code_for_builtns): Update.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index eaa812d587f..4b9b7cfd970 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -365,6 +365,7 @@ static bool get_nonnull_operand PARAMS ((tree,
void builtin_define_std PARAMS ((const char *));
static void builtin_define_with_value PARAMS ((const char *, const char *,
int));
+static void builtin_define_type_max PARAMS ((const char *, tree, int));
/* Table of machine-independent attributes common to all C-like languages. */
const struct attribute_spec c_common_attribute_table[] =
@@ -4346,6 +4347,19 @@ cb_register_builtins (pfile)
builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
+ /* limits.h needs to know these. */
+ builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node, 0);
+ builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node, 0);
+ builtin_define_type_max ("__INT_MAX__", integer_type_node, 0);
+ builtin_define_type_max ("__LONG_MAX__", long_integer_type_node, 1);
+ builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node, 2);
+
+ {
+ char buf[8];
+ sprintf (buf, "%d", (int) TYPE_PRECISION (signed_char_type_node));
+ builtin_define_with_value ("__CHAR_BIT__", buf, 0);
+ }
+
/* For use in assembly language. */
builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
@@ -4457,6 +4471,54 @@ builtin_define_with_value (macro, expansion, is_str)
cpp_define (parse_in, buf);
}
+/* Define MAX for TYPE based on the precision of the type, which is assumed
+ to be signed. IS_LONG is 1 for type "long" and 2 for "long long". */
+
+static void
+builtin_define_type_max (macro, type, is_long)
+ const char *macro;
+ tree type;
+ int is_long;
+{
+ const char *value;
+ char *buf;
+ size_t mlen, vlen, extra;
+
+ /* Pre-rendering the values mean we don't have to futz with printing a
+ multi-word decimal value. There are also a very limited number of
+ precisions that we support, so it's really a waste of time. */
+ switch (TYPE_PRECISION (type))
+ {
+ case 8:
+ value = "127";
+ break;
+ case 16:
+ value = "32767";
+ break;
+ case 32:
+ value = "2147483647";
+ break;
+ case 64:
+ value = "9223372036854775807";
+ break;
+ case 128:
+ value = "170141183460469231731687303715884105727";
+ break;
+ default:
+ abort ();
+ }
+
+ mlen = strlen (macro);
+ vlen = strlen (value);
+ extra = 2 + is_long;
+ buf = alloca (mlen + vlen + extra);
+
+ sprintf (buf, "%s=%s%s", macro, value,
+ (is_long == 1 ? "L" : is_long == 2 ? "LL" : ""));
+
+ cpp_define (parse_in, buf);
+}
+
/* Front end initialization common to C, ObjC and C++. */
const char *
c_common_init (filename)
diff --git a/gcc/config/alpha/unicosmk.h b/gcc/config/alpha/unicosmk.h
index d21ba8844c4..cd9308c027e 100644
--- a/gcc/config/alpha/unicosmk.h
+++ b/gcc/config/alpha/unicosmk.h
@@ -43,8 +43,6 @@ Boston, MA 02111-1307, USA. */
builtin_define ("_ADDR64"); \
builtin_define ("_LD64"); \
builtin_define ("__UNICOSMK__"); \
- builtin_define ("__INT_MAX__=9223372036854775807"); \
- builtin_define ("__SHRT_MAX__=2147483647"); \
} while (0)
#define SHORT_TYPE_SIZE 32
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 5148f3ee8dc..65effa66fba 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -38,10 +38,6 @@ Boston, MA 02111-1307, USA. */
builtin_define ("__AVR_MEGA__"); \
if (TARGET_NO_INTERRUPTS) \
builtin_define ("__NO_INTERRUPTS__"); \
- if (TARGET_INT8) \
- builtin_define ("__INT_MAX__=127"); \
- else \
- builtin_define ("__INT_MAX__=32767"); \
} \
while (0)
diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h
index 4c34e514716..1fa64ccf1ba 100644
--- a/gcc/config/h8300/h8300.h
+++ b/gcc/config/h8300/h8300.h
@@ -59,12 +59,6 @@ extern const char * const *h8_reg_names;
builtin_assert ("cpu=h8300"); \
builtin_assert ("machine=h8300"); \
} \
- if (TARGET_INT32) \
- builtin_define ("__INT_MAX__=2147483647"); \
- else \
- builtin_define ("__INT_MAX__=32767"); \
- builtin_define ("__LONG_MAX__=2147483647L"); \
- builtin_define ("__LONG_LONG_MAX__=2147483647L"); \
} \
while (0)
diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h
index 52730856e71..99c381aa4de 100644
--- a/gcc/config/i386/linux64.h
+++ b/gcc/config/i386/linux64.h
@@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA. */
#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem(posix)"
#undef CPP_SPEC
-#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!m32:-D__LONG_MAX__=9223372036854775807L}"
+#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
/* Provide a LINK_SPEC. Here we provide support for the special GCC
options -static and -shared, which allow us to link things in one
diff --git a/gcc/config/ia64/aix.h b/gcc/config/ia64/aix.h
index b52d49cf66d..40b654836d1 100644
--- a/gcc/config/ia64/aix.h
+++ b/gcc/config/ia64/aix.h
@@ -81,8 +81,7 @@ Boston, MA 02111-1307, USA. */
%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \
%{ansi:-D_ANSI_C_SOURCE} \
%{posix:-D_POSIX_SOURCE} \
-%{cpp_cpu} \
--D__LONG_MAX__=9223372036854775807L"
+%{cpp_cpu}"
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "\
@@ -97,7 +96,6 @@ Boston, MA 02111-1307, USA. */
-D_XOPEN_SOURCE_EXTENDED=1 \
-D_LARGE_FILE_API \
-D_ALL_SOURCE \
- -D__LONG_MAX__=9223372036854775807L \
%{cpp_cpu}"
/* Define this for shared library support. */
diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h
index afc79990317..8b1867897cf 100644
--- a/gcc/config/ia64/hpux.h
+++ b/gcc/config/ia64/hpux.h
@@ -40,7 +40,7 @@ Boston, MA 02111-1307, USA. */
#undef CPP_SPEC
#define CPP_SPEC "\
%{mcpu=itanium:-D__itanium__} \
- %{mlp64:-D__LP64__ -D_LP64 -D__LONG_MAX__=9223372036854775807L} \
+ %{mlp64:-D__LP64__ -D_LP64} \
%{!ansi:%{!std=c*:%{!std=i*: -D_HPUX_SOURCE -D__STDC_EXT__}}} \
-D__fpreg=long\\ double \
-D__float80=long\\ double \
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index ab265ca7a06..83da1644e7f 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -212,14 +212,8 @@ extern const char *ia64_tls_size_string;
CPP. It can also specify how to translate options you give to GNU CC into
options for GNU CC to pass to the CPP. */
-/* ??? __LONG_MAX__ depends on LP64/ILP32 switch. */
-/* ??? An alternative is to modify glimits.h to check for __LP64__ instead
- of checked for CPU specific defines. We could also get rid of all LONG_MAX
- defines in other tm.h files. */
#define CPP_SPEC \
- "%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \
- %(cpp_cpu) \
- -D__LONG_MAX__=9223372036854775807L"
+ "%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} %(cpp_cpu)"
/* A C string constant that tells the GNU CC driver program options to pass to
`cc1'. It can also specify how to translate options you give to GNU CC into
diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h
index 47a5cd83b7a..42950e79c3c 100644
--- a/gcc/config/m68hc11/m68hc11.h
+++ b/gcc/config/m68hc11/m68hc11.h
@@ -62,8 +62,8 @@ Note:
#ifndef CPP_SPEC
#define CPP_SPEC \
-"%{mshort:-D__HAVE_SHORT_INT__ -D__INT__=16 -D__INT_MAX__=32767}\
- %{!mshort:-D__INT__=32 -D__INT_MAX__=2147483647}\
+"%{mshort:-D__HAVE_SHORT_INT__ -D__INT__=16}\
+ %{!mshort:-D__INT__=32}\
%{m68hc12:-Dmc6812 -DMC6812 -Dmc68hc12}\
%{!m68hc12:-Dmc6811 -DMC6811 -Dmc68hc11}\
%{fshort-double:-D__HAVE_SHORT_DOUBLE__}"
diff --git a/gcc/config/m68hc11/m68hc12.h b/gcc/config/m68hc11/m68hc12.h
index 277c788915b..ba56c172993 100644
--- a/gcc/config/m68hc11/m68hc12.h
+++ b/gcc/config/m68hc11/m68hc12.h
@@ -29,8 +29,8 @@ Boston, MA 02111-1307, USA. */
#define LINK_SPEC "%{m68hc11:-m m68hc11elf}%{!m68hc11:-m m68hc12elf}"
#define CPP_SPEC \
-"%{mshort:-D__HAVE_SHORT_INT__ -D__INT__=16 -D__INT_MAX__=32767}\
- %{!mshort:-D__INT__=32 -D__INT_MAX__=2147483647}\
+"%{mshort:-D__HAVE_SHORT_INT__ -D__INT__=16}\
+ %{!mshort:-D__INT__=32}\
%{m68hc11:-Dmc6811 -DMC6811 -Dmc68hc11}\
%{!m68hc11:-Dmc6812 -DMC6812 -Dmc68hc12}\
%{fshort-double:-D__HAVE_SHORT_DOUBLE__}"
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 8242992b11d..b68840f5e1b 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -417,9 +417,6 @@ extern void sbss_section PARAMS ((void));
if (TARGET_SINGLE_FLOAT) \
builtin_define ("__mips_single_float"); \
\
- if (TARGET_LONG64) \
- builtin_define ("__LONG_MAX__=9223372036854775807L"); \
- \
if (TARGET_BIG_ENDIAN) \
{ \
builtin_define_std ("MIPSEB"); \
diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h
index 8ffef0b96e7..17471a6e6fa 100644
--- a/gcc/config/mmix/mmix.h
+++ b/gcc/config/mmix/mmix.h
@@ -145,7 +145,6 @@ extern const char *mmix_cc1_ignored_option;
{ \
builtin_define ("__mmix__"); \
builtin_define ("__MMIX__"); \
- builtin_define ("__LONG_MAX__=9223372036854775807L"); \
if (TARGET_ABI_GNU) \
builtin_define ("__MMIX_ABI_GNU__"); \
else \
diff --git a/gcc/config/mn10200/mn10200.h b/gcc/config/mn10200/mn10200.h
index bc9606e7129..8bf169fc97b 100644
--- a/gcc/config/mn10200/mn10200.h
+++ b/gcc/config/mn10200/mn10200.h
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-D__mn10200__ -D__MN10200__ -D__LONG_MAX__=2147483647L -D__LONG_LONG_MAX__=2147483647L -D__INT_MAX__=32767"
+#define CPP_PREDEFINES "-D__mn10200__ -D__MN10200__"
/* Run-time compilation parameters selecting different hardware subsets. */
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index d71328b563e..a9c23ac0d1e 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -268,7 +268,7 @@ extern int target_flags;
#define CPP_PA10_SPEC ""
#define CPP_PA11_SPEC "-D_PA_RISC1_1 -D__hp9000s700"
#define CPP_PA20_SPEC "-D_PA_RISC2_0 -D__hp9000s800"
-#define CPP_64BIT_SPEC "-D__LP64__ -D__LONG_MAX__=9223372036854775807L"
+#define CPP_64BIT_SPEC "-D__LP64__"
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_PA_11) == 0
#define CPP_CPU_DEFAULT_SPEC "%(cpp_pa10)"
diff --git a/gcc/config/rs6000/aix43.h b/gcc/config/rs6000/aix43.h
index fe560a22470..ddf9857d9c2 100644
--- a/gcc/config/rs6000/aix43.h
+++ b/gcc/config/rs6000/aix43.h
@@ -103,7 +103,7 @@ do { \
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}\
%{ansi: -D_ANSI_C_SOURCE}\
- %{maix64: -D__64BIT__ -D__LONG_MAX__=9223372036854775807L}\
+ %{maix64: -D__64BIT__}\
%{mpe: -I/usr/lpp/ppe.poe/include}\
%{pthread: -D_THREAD_SAFE}"
@@ -114,9 +114,9 @@ do { \
"-D_XOPEN_SOURCE=500 \
-D_XOPEN_SOURCE_EXTENDED=1 \
-D_LARGE_FILE_API \
- -D_ALL_SOURCE \
- %{maix64: -D__64BIT__ -D__LONG_MAX__=9223372036854775807L}\
- %{mpe: -I/usr/lpp/ppe.poe/include}\
+ -D_ALL_SOURCE \
+ %{maix64: -D__64BIT__} \
+ %{mpe: -I/usr/lpp/ppe.poe/include} \
%{pthread: -D_THREAD_SAFE}"
#undef TARGET_DEFAULT
diff --git a/gcc/config/rs6000/aix51.h b/gcc/config/rs6000/aix51.h
index f0b9e7df503..2f0d68274f9 100644
--- a/gcc/config/rs6000/aix51.h
+++ b/gcc/config/rs6000/aix51.h
@@ -101,22 +101,22 @@ do { \
-D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -Asystem=unix -Asystem=aix"
#undef CPP_SPEC
-#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}\
- %{ansi: -D_ANSI_C_SOURCE}\
- %{maix64: -D__64BIT__ -D__LONG_MAX__=9223372036854775807L}
- %{mpe: -I/usr/lpp/ppe.poe/include}\
+#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
+ %{ansi: -D_ANSI_C_SOURCE} \
+ %{maix64: -D__64BIT__} \
+ %{mpe: -I/usr/lpp/ppe.poe/include} \
%{pthread: -D_THREAD_SAFE}"
/* The GNU C++ standard library requires that these macros be
defined. */
#undef CPLUSPLUS_CPP_SPEC
-#define CPLUSPLUS_CPP_SPEC \
- "-D_XOPEN_SOURCE=500 \
- -D_XOPEN_SOURCE_EXTENDED=1 \
- -D_LARGE_FILE_API \
- -D_ALL_SOURCE \
- %{maix64: -D__64BIT__ -D__LONG_MAX__=9223372036854775807L}
- %{mpe: -I/usr/lpp/ppe.poe/include}\
+#define CPLUSPLUS_CPP_SPEC \
+ "-D_XOPEN_SOURCE=500 \
+ -D_XOPEN_SOURCE_EXTENDED=1 \
+ -D_LARGE_FILE_API \
+ -D_ALL_SOURCE \
+ %{maix64: -D__64BIT__} \
+ %{mpe: -I/usr/lpp/ppe.poe/include} \
%{pthread: -D_THREAD_SAFE}"
#undef TARGET_DEFAULT
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index ab2a40968c9..eaa962d024d 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -110,7 +110,6 @@ Boston, MA 02111-1307, USA. */
#define CPP_PREDEFINES \
"-D_PPC_ -D__PPC__ -D_PPC64_ -D__PPC64__ -D__powerpc__ -D__powerpc64__ \
-D_PIC_ -D__PIC__ -D__ELF__ \
- -D__LONG_MAX__=9223372036854775807L \
-Acpu=powerpc64 -Amachine=powerpc64"
#undef CPP_OS_DEFAULT_SPEC
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
index f49e8b5db4f..8e411b80d50 100644
--- a/gcc/config/s390/linux.h
+++ b/gcc/config/s390/linux.h
@@ -55,7 +55,7 @@ Boston, MA 02111-1307, USA. */
-Acpu(s390) -Amachine(s390) -D__s390__"
#define CPP_ARCH31_SPEC ""
-#define CPP_ARCH64_SPEC "-D__s390x__ -D__LONG_MAX__=9223372036854775807L"
+#define CPP_ARCH64_SPEC "-D__s390x__"
#undef CPP_SPEC
#ifdef DEFAULT_TARGET_64BIT
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 9e1b4b27555..1479c0210c4 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -65,9 +65,6 @@ do { \
TARGET_SHMEDIA ? "1" : "0", 0); \
if (! TARGET_FPU_DOUBLE) \
builtin_define ("__SH4_NOFPU__"); \
- if (TARGET_SHMEDIA64) \
- builtin_define_with_value ("__LONG_MAX__", \
- "9223372036854775807L", 0); \
} \
} \
if (TARGET_HITACHI) \
diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h
index 7a6b166aec7..560d0d2239a 100644
--- a/gcc/config/stormy16/stormy16.h
+++ b/gcc/config/stormy16/stormy16.h
@@ -67,7 +67,7 @@ Boston, MA 02111-1307, USA. */
/* Run-time target specifications */
-#define CPP_PREDEFINES "-Dxstormy16 -Amachine=xstormy16 -D__INT_MAX__=32767"
+#define CPP_PREDEFINES "-Dxstormy16 -Amachine=xstormy16"
/* This declaration should be present. */
extern int target_flags;
diff --git a/gcc/glimits.h b/gcc/glimits.h
index c3b83da15f9..710cbb528ab 100644
--- a/gcc/glimits.h
+++ b/gcc/glimits.h
@@ -3,7 +3,7 @@
/* Number of bits in a `char'. */
#undef CHAR_BIT
-#define CHAR_BIT 8
+#define CHAR_BIT __CHAR_BIT__
/* Maximum length of a multibyte character. */
#ifndef MB_LEN_MAX
@@ -12,102 +12,92 @@
/* Minimum and maximum values a `signed char' can hold. */
#undef SCHAR_MIN
-#define SCHAR_MIN (-128)
+#define SCHAR_MIN (-SCHAR_MAX - 1)
#undef SCHAR_MAX
-#define SCHAR_MAX 127
+#define SCHAR_MAX __SCHAR_MAX__
/* Maximum value an `unsigned char' can hold. (Minimum is 0). */
#undef UCHAR_MAX
-#define UCHAR_MAX 255
+#if __SCHAR_MAX__ == __INT_MAX__
+# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
+#else
+# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
+#endif
/* Minimum and maximum values a `char' can hold. */
#ifdef __CHAR_UNSIGNED__
-#undef CHAR_MIN
-#define CHAR_MIN 0
-#undef CHAR_MAX
-#define CHAR_MAX 255
+# undef CHAR_MIN
+# if __SCHAR_MAX__ == __INT_MAX__
+# define CHAR_MIN 0U
+# else
+# define CHAR_MIN 0
+# endif
+# undef CHAR_MAX
+# define CHAR_MAX UCHAR_MAX
#else
-#undef CHAR_MIN
-#define CHAR_MIN (-128)
-#undef CHAR_MAX
-#define CHAR_MAX 127
-#endif
-
-#ifndef __SHRT_MAX__
-#define __SHRT_MAX__ 32767
+# undef CHAR_MIN
+# define CHAR_MIN SCHAR_MIN
+# undef CHAR_MAX
+# define CHAR_MAX SCHAR_MAX
#endif
/* Minimum and maximum values a `signed short int' can hold. */
#undef SHRT_MIN
-#define SHRT_MIN (-SHRT_MAX-1)
+#define SHRT_MIN (-SHRT_MAX - 1)
#undef SHRT_MAX
#define SHRT_MAX __SHRT_MAX__
-/* Minimum and maximum values a `signed int' can hold. */
-#ifndef __INT_MAX__
-#define __INT_MAX__ 2147483647
-#endif
-#undef INT_MIN
-#define INT_MIN (-INT_MAX-1)
-#undef INT_MAX
-#define INT_MAX __INT_MAX__
-
/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */
#undef USHRT_MAX
#if __SHRT_MAX__ == __INT_MAX__
-#define USHRT_MAX (SHRT_MAX * 2U + 1U)
+# define USHRT_MAX (SHRT_MAX * 2U + 1U)
#else
-#define USHRT_MAX (SHRT_MAX * 2 + 1)
+# define USHRT_MAX (SHRT_MAX * 2 + 1)
#endif
+/* Minimum and maximum values a `signed int' can hold. */
+#undef INT_MIN
+#define INT_MIN (-INT_MAX - 1)
+#undef INT_MAX
+#define INT_MAX __INT_MAX__
+
/* Maximum value an `unsigned int' can hold. (Minimum is 0). */
#undef UINT_MAX
-#define UINT_MAX (INT_MAX * 2U + 1)
+#define UINT_MAX (INT_MAX * 2U + 1U)
/* Minimum and maximum values a `signed long int' can hold.
(Same as `int'). */
-#ifndef __LONG_MAX__
-#if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9)
-#define __LONG_MAX__ 9223372036854775807L
-#else
-#define __LONG_MAX__ 2147483647L
-#endif /* __alpha__ || sparc64 */
-#endif
#undef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
+#define LONG_MIN (-LONG_MAX - 1L)
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__
/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */
#undef ULONG_MAX
-#define ULONG_MAX (LONG_MAX * 2UL + 1)
-
-#ifndef __LONG_LONG_MAX__
-#define __LONG_LONG_MAX__ 9223372036854775807LL
-#endif
+#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* Minimum and maximum values a `signed long long int' can hold. */
-#undef LLONG_MIN
-#define LLONG_MIN (-LLONG_MAX-1)
-#undef LLONG_MAX
-#define LLONG_MAX __LONG_LONG_MAX__
+# undef LLONG_MIN
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# undef LLONG_MAX
+# define LLONG_MAX __LONG_LONG_MAX__
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
-#undef ULLONG_MAX
-#define ULLONG_MAX (LLONG_MAX * 2ULL + 1)
+# undef ULLONG_MAX
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
#endif
#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
/* Minimum and maximum values a `signed long long int' can hold. */
-#undef LONG_LONG_MIN
-#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
-#undef LONG_LONG_MAX
-#define LONG_LONG_MAX __LONG_LONG_MAX__
+# undef LONG_LONG_MIN
+# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
+# undef LONG_LONG_MAX
+# define LONG_LONG_MAX __LONG_LONG_MAX__
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
-#undef ULONG_LONG_MAX
-#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
+# undef ULONG_LONG_MAX
+# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
#endif
#endif /* _LIMITS_H___ */