diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-04-14 23:01:38 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-04-14 23:01:38 +0000 |
commit | 8b2f77e739c14399642546438df48e64b7783809 (patch) | |
tree | a2e2acceef2effbca1fa1f23ebeb60b09e26acbf /gcc/c-decl.c | |
parent | aa076a66e129e2e28f87beeda744e4175c621683 (diff) | |
download | gcc-8b2f77e739c14399642546438df48e64b7783809.tar.gz |
(finish_enum): Don't crash if no type can represent all enumeration values.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@11771 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 6ad09d94ba5..249992b23ba 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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); |