c-common.c (warn_for_sign_compare): Cast to unsigned when shifting a negative value.
authorMarek Polacek <polacek@redhat.com>
Mon, 14 Sep 2015 10:36:50 +0000 (10:36 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Mon, 14 Sep 2015 10:36:50 +0000 (10:36 +0000)
* c-common.c (warn_for_sign_compare): Cast to unsigned when shifting
a negative value.

* c-typeck.c (set_nonincremental_init_from_string): Use
HOST_WIDE_INT_M1U when shifting a negative value.

* rtlanal.c (split_double): Cast to unsigned when shifting a negative
value.
* sched-int.h (UNKNOWN_DEP_COST): Likewise.

From-SVN: r227743

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/rtlanal.c
gcc/sched-int.h

index 0aa46d0515068fdd4b5626e8bc3ec626ce0787ab..462a997707118bd4f2a6dd31599fdbd8ef7bb545 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-14  Marek Polacek  <polacek@redhat.com>
+
+       * rtlanal.c (split_double): Cast to unsigned when shifting a negative
+       value.
+       * sched-int.h (UNKNOWN_DEP_COST): Likewise.
+
 2015-09-11  Mark Wielaard  <mjw@redhat.com>
 
        PR c/28901
index 0163b1593dd629a347938cd2e78e7934e0b444e4..8f8de188005429aee152ed67545f583d8c939e93 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-14  Marek Polacek  <polacek@redhat.com>
+
+       * c-common.c (warn_for_sign_compare): Cast to unsigned when shifting
+       a negative value.
+
 2015-09-11  Mark Wielaard  <mjw@redhat.com>
 
        PR c/28901
index 9758b9e07e819588675a935e99ca45dd5b9827f7..4b922bfbce1b3fafd65e1499c369b334cc7bff10 100644 (file)
@@ -12142,7 +12142,7 @@ warn_for_sign_compare (location_t location,
           if (bits < TYPE_PRECISION (result_type)
               && bits < HOST_BITS_PER_LONG && unsignedp)
             {
-              mask = (~ (HOST_WIDE_INT) 0) << bits;
+              mask = (~ (unsigned HOST_WIDE_INT) 0) << bits;
               if ((mask & constant) != mask)
                {
                  if (constant == 0)
index 325686a4b1c5e37bc97c9d1e43109e780b4dc99f..289142474244db78b061a4c44e0d72f90c682ec7 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-14  Marek Polacek  <polacek@redhat.com>
+
+       * c-typeck.c (set_nonincremental_init_from_string): Use
+       HOST_WIDE_INT_M1U when shifting a negative value.
+
 2015-09-09  Mark Wielaard  <mjw@redhat.com>
 
        * c-typeck.c (build_binary_op): Check and warn when nonnull arg
index 4108f27ab7c53839d0a867004ba6bbd24cecffb0..3b2623140e3d2118452672abcdbafc2533bb18e0 100644 (file)
@@ -8276,7 +8276,7 @@ set_nonincremental_init_from_string (tree str,
            {
              if (val[0] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
                {
-                 val[0] |= ((HOST_WIDE_INT) -1) << bitpos;
+                 val[0] |= HOST_WIDE_INT_M1U << bitpos;
                  val[1] = -1;
                }
            }
@@ -8287,8 +8287,7 @@ set_nonincremental_init_from_string (tree str,
            }
          else if (val[1] & (((HOST_WIDE_INT) 1)
                             << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
-           val[1] |= ((HOST_WIDE_INT) -1)
-                     << (bitpos - HOST_BITS_PER_WIDE_INT);
+           val[1] |= HOST_WIDE_INT_M1U << (bitpos - HOST_BITS_PER_WIDE_INT);
        }
 
       value = wide_int_to_tree (type,
index ef98f4bfb5cea1a825ae82cd3b08c3a7518318ab..b1be4db0dc1abb065d1cf94ad2049b11153be7e3 100644 (file)
@@ -5805,9 +5805,9 @@ split_double (rtx value, rtx *first, rtx *second)
       if (BITS_PER_WORD < HOST_BITS_PER_LONG && BITS_PER_WORD == 32)
        {
          if (l[0] & ((long) 1 << 31))
-           l[0] |= ((long) (-1) << 32);
+           l[0] |= ((unsigned long) (-1) << 32);
          if (l[1] & ((long) 1 << 31))
-           l[1] |= ((long) (-1) << 32);
+           l[1] |= ((unsigned long) (-1) << 32);
        }
 #endif
 
index 61825ce5689792ef5b8d28b14338e868938f6676..800262c4a4a0352045b4c32ea42e138a2d17ad6b 100644 (file)
@@ -240,7 +240,7 @@ struct _dep
   int cost:20;
 };
 
-#define UNKNOWN_DEP_COST (-1<<19)
+#define UNKNOWN_DEP_COST ((int) ((unsigned int) -1 << 19))
 
 typedef struct _dep dep_def;
 typedef dep_def *dep_t;