aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <merrill@gnu.org>1994-10-15 00:32:58 +0000
committerJason Merrill <merrill@gnu.org>1994-10-15 00:32:58 +0000
commit13fbb038189e72f6ba1ff8ffe13de137060a7187 (patch)
tree31bd1143b29a49c1d148daff4bfefe4fbe918707
parentc6a29b1f9dac32b18da43f58cd5a84745cbbf797 (diff)
downloadgcc-13fbb038189e72f6ba1ff8ffe13de137060a7187.zip
gcc-13fbb038189e72f6ba1ff8ffe13de137060a7187.tar.gz
gcc-13fbb038189e72f6ba1ff8ffe13de137060a7187.tar.bz2
(finish_enum): Disable code which forces enums to be signed,
since this conflicts with their use as bitfields. type_promotes_to handles promotion of enums of underlying unsigned types to signed integer types. From-SVN: r8279
-rw-r--r--gcc/cp/decl.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index b6b4f89..d4e04f0 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -10282,9 +10282,20 @@ finish_enum (enumtype, values)
if (! flag_short_enums && precision < TYPE_PRECISION (integer_type_node))
precision = TYPE_PRECISION (integer_type_node);
+
+ /*
+ * The following code is unnecessary since the function
+ * type_promotes_to deals correctly with promotion of enums of
+ * underlying unsigned types to signed integer types.
+ * Moreover, it causes an enum bitfield to require one more bit of
+ * storage than defined by the ANSI/ISO C++ resolution section r.7.2
+ * which defines the range of an enum.
+ */
+#if 0
/* Unlike the C frontend, we prefer signed types. */
if (unsignedp && int_fits_type_p (maxnode, type_for_size (precision, 0)))
unsignedp = 0;
+#endif
TYPE_PRECISION (enumtype) = precision;
TYPE_SIZE (enumtype) = NULL_TREE;