http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00968.html http://blog.janik.cz/archives/2004-11-23T22_37_37.html --- gcc/fold-const.c.orig Tue Jun 1 08:15:12 2004 +++ gcc/fold-const.c Wed Nov 24 16:39:02 2004 @@ -3535,7 +3535,13 @@ HOST_WIDE_INT hi; int prec; - prec = TYPE_PRECISION (etype); + /* For enums the comparison will be done in the underlying type, + so using enum's precision is wrong here. + Consider e.g. enum { A, B, C, D, E }, low == B and high == D. */ + if (TREE_CODE (etype) == ENUMERAL_TYPE) + prec = GET_MODE_BITSIZE (TYPE_MODE (etype)); + else + prec = TYPE_PRECISION (etype); if (prec <= HOST_BITS_PER_WIDE_INT) { hi = 0;