diff options
author | Jason Merrill <merrill@gnu.org> | 1994-10-15 00:32:58 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1994-10-15 00:32:58 +0000 |
commit | cf2ac46f182c35397fca39c0dbe392fa0c6df011 (patch) | |
tree | 49f880a1dc5b69e3647d3d0c2a99574dc4f04ab4 /gcc | |
parent | fffba94c902cc169bc55e4c923ba04d42fb8d8b0 (diff) | |
download | gcc-cf2ac46f182c35397fca39c0dbe392fa0c6df011.zip gcc-cf2ac46f182c35397fca39c0dbe392fa0c6df011.tar.gz gcc-cf2ac46f182c35397fca39c0dbe392fa0c6df011.tar.bz2 |
(type_promotes_to): Also promote enums to long if
appropriate.
From-SVN: r8277
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/cvt.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index d804ff2..7777350 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -2024,11 +2024,16 @@ type_promotes_to (type) wider. */ else if (TREE_CODE (type) == ENUMERAL_TYPE || type == wchar_type_node) - type = type_for_size - (MAX (TYPE_PRECISION (type), TYPE_PRECISION (integer_type_node)), - (flag_traditional - || (TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))) - && TREE_UNSIGNED (type)); + { + int precision = MAX (TYPE_PRECISION (type), + TYPE_PRECISION (integer_type_node)); + tree totype = type_for_size (precision, 0); + if (TREE_UNSIGNED (type) + && ! int_fits_type_p (TYPE_MAX_VALUE (type), totype)) + type = type_for_size (precision, 1); + else + type = totype; + } else if (C_PROMOTING_INTEGER_TYPE_P (type)) { /* Traditionally, unsignedness is preserved in default promotions. |