(finish_enum): Don't crash if no type can represent all enumeration values.
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 14 Apr 1996 23:01:38 +0000 (19:01 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 14 Apr 1996 23:01:38 +0000 (19:01 -0400)
From-SVN: r11771

gcc/c-decl.c

index 6ad09d94ba50ef889b5b60b678bffe80dc9d3291..249992b23baec771e10196d2a2f963667c51911e 100644 (file)
@@ -5894,8 +5894,16 @@ finish_enum (enumtype, values, attributes)
 
   if (flag_short_enums || TYPE_PACKED (enumtype)
       || precision > TYPE_PRECISION (integer_type_node))
-    /* Use the width of the narrowest normal C type which is wide enough.  */
-    TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
+    {
+      tree narrowest = type_for_size (precision, 1);
+      if (narrowest == 0)
+       {
+         warning ("enumeration values exceed range of largest integer");
+         narrowest = long_long_integer_type_node;
+       }
+
+      TYPE_PRECISION (enumtype) = TYPE_PRECISION (narrowest);
+    }
   else
     TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);