diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0a8495525ba8e181a404bb4a27819508ffa7d70c..5114bfd8b6ff5f441ec1160338a1cc7391400a3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2004-02-20  Kazu Hirata  <kazu@cs.umass.edu>
+
+	Revert:
+	2004-02-19  Kazu Hirata  <kazu@cs.umass.edu>
+	* opts.c (decode_options): Don't use DEFAULT_SHORT_ENUMS.
+	* system.h (DEFAULT_SHORT_ENUMS): Poison.
+	* config/cris/cris.h: Remove a comment about
+	DEFAULT_SHORT_ENUMS.
+	* config/ip2k/ip2k.h: Likewise.
+	* doc/tm.texi (DEFAULT_SHORT_ENUMS): Remove.
+
 2004-02-20  Mohan Embar  <gnustuff@thisiscool.com>
 	    Tom Tromey  <tromey@redhat.com>
 
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index 10147b272590f46371d25c86398e760bf70bbe17..5110f9adbfb92484e923f0a43c5988160da6912d 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -567,6 +567,8 @@ extern int target_flags;
 /* For compatibility and historical reasons, a char should be signed.  */
 #define DEFAULT_SIGNED_CHAR 1
 
+/* No DEFAULT_SHORT_ENUMS, please.  */
+
 /* Note that WCHAR_TYPE_SIZE is used in cexp.y,
    where TARGET_SHORT is not available.  */
 #undef WCHAR_TYPE
diff --git a/gcc/config/ip2k/ip2k.h b/gcc/config/ip2k/ip2k.h
index 4685d030c1c0fa5edb0d5f1d77e91c3d90d6d8e0..6457e8bb3eff5965702fdf1353b1179ce5c4cbde 100644
--- a/gcc/config/ip2k/ip2k.h
+++ b/gcc/config/ip2k/ip2k.h
@@ -108,6 +108,12 @@ extern int target_flags;
 
 #define DEFAULT_SIGNED_CHAR 1
 
+/* #define DEFAULT_SHORT_ENUMS	1
+   This was the default for the IP2k but gcc has a bug (as of 17th May
+   2001) in the way that library calls to the memory checker functions
+   are issues that screws things up if an enum is not equivalent to
+   an int.  */
+
 #define SIZE_TYPE "unsigned int"
 
 #define PTRDIFF_TYPE "int"
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index f8e39a7dda122d0114c714128cc1d71c964fbe72..395eec808933dbaa1a5cc31402f5b610a40c00e8 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -1605,6 +1605,15 @@ always override this default with the options @option{-fsigned-char}
 and @option{-funsigned-char}.
 @end defmac
 
+@defmac DEFAULT_SHORT_ENUMS
+A C expression to determine whether to give an @code{enum} type
+only as many bytes as it takes to represent the range of possible values
+of that type.  A nonzero value means to do that; a zero value means all
+@code{enum} types should be allocated like @code{int}.
+
+If you don't define the macro, the default is 0.
+@end defmac
+
 @defmac SIZE_TYPE
 A C expression for a string describing the name of the data type to use
 for size values.  The typedef name @code{size_t} is defined using the
diff --git a/gcc/opts.c b/gcc/opts.c
index b25ba430f18761d7548d58feed989f8e93d15aaa..45acba3c4f765aae6a22c75ca0614ef67f3a5b5a 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -594,6 +594,10 @@ decode_options (unsigned int argc, const char **argv)
 
   /* Initialize whether `char' is signed.  */
   flag_signed_char = DEFAULT_SIGNED_CHAR;
+#ifdef DEFAULT_SHORT_ENUMS
+  /* Initialize how much space enums occupy, by default.  */
+  flag_short_enums = DEFAULT_SHORT_ENUMS;
+#endif
 
   /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
      modify it.  */
diff --git a/gcc/system.h b/gcc/system.h
index 644dfe9edf8bb3c8aed3a232ab8b4c63e63b72f3..31a1b92357f4ce343038ca2ed7159720b3413740 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -636,8 +636,7 @@ typedef char _Bool;
 	PROMOTED_MODE EXPAND_BUILTIN_VA_END				   \
 	LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE	   \
 	GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE	   \
-	MAX_WCHAR_TYPE_SIZE GCOV_TYPE_SIZE SHARED_SECTION_ASM_OP	   \
-	DEFAULT_SHORT_ENUMS
+	MAX_WCHAR_TYPE_SIZE GCOV_TYPE_SIZE SHARED_SECTION_ASM_OP
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\