OSDN Git Service

* config/bfin/bfin-protos.h (enum bfin_cpu): Add
[pf3gnuchains/gcc-fork.git] / gcc / expmed.c
index 58b6a63..8e8a639 100644 (file)
@@ -4176,7 +4176,12 @@ expand_divmod (int rem_flag, enum tree_code code, enum machine_mode mode,
                HOST_WIDE_INT d = INTVAL (op1);
                unsigned HOST_WIDE_INT abs_d;
 
-               abs_d = d >= 0 ? d : - (unsigned HOST_WIDE_INT) d;
+               /* Since d might be INT_MIN, we have to cast to
+                  unsigned HOST_WIDE_INT before negating to avoid
+                  undefined signed overflow.  */
+               abs_d = (d >= 0
+                        ? (unsigned HOST_WIDE_INT) d
+                        : - (unsigned HOST_WIDE_INT) d);
 
                /* n rem d = n rem -d */
                if (rem_flag && d < 0)