Use HOST_WIDE_INT for a param calculation (PR rtl-optimization/79574).
authorMartin Liska <mliska@suse.cz>
Fri, 17 Feb 2017 14:46:14 +0000 (15:46 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Fri, 17 Feb 2017 14:46:14 +0000 (14:46 +0000)
2017-02-17  Martin Liska  <mliska@suse.cz>

PR rtl-optimization/79574
* gcc.dg/pr79574.c: New test.
2017-02-17  Martin Liska  <mliska@suse.cz>

PR rtl-optimization/79574
* gcse.c (want_to_gcse_p): Prevent integer overflow.

From-SVN: r245531

gcc/ChangeLog
gcc/gcse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr79574.c [new file with mode: 0644]

index defd543..ec8049b 100644 (file)
@@ -1,5 +1,10 @@
 2017-02-17  Martin Liska  <mliska@suse.cz>
 
+       PR rtl-optimization/79574
+       * gcse.c (want_to_gcse_p): Prevent integer overflow.
+
+2017-02-17  Martin Liska  <mliska@suse.cz>
+
        PR tree-optimization/79529
        * tree-ssa-loop-unswitch.c (is_maybe_undefined): Use
        ssa_defined_default_def_p to handle cases which are implicitly
index d28288d..5c6984c 100644 (file)
@@ -790,7 +790,7 @@ want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr)
        /* PRE doesn't implement max_distance restriction.  */
        {
          int cost;
-         int max_distance;
+         HOST_WIDE_INT max_distance;
 
          gcc_assert (!optimize_function_for_speed_p (cfun)
                      && optimize_function_for_size_p (cfun));
@@ -798,7 +798,8 @@ want_to_gcse_p (rtx x, machine_mode mode, int *max_distance_ptr)
 
          if (cost < COSTS_N_INSNS (GCSE_UNRESTRICTED_COST))
            {
-             max_distance = (GCSE_COST_DISTANCE_RATIO * cost) / 10;
+             max_distance
+               = ((HOST_WIDE_INT)GCSE_COST_DISTANCE_RATIO * cost) / 10;
              if (max_distance == 0)
                return 0;
 
index abd9308..d0a95d4 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-17  Martin Liska  <mliska@suse.cz>
+
+       PR rtl-optimization/79574
+       * gcc.dg/pr79574.c: New test.
+
 2017-02-17  Marek Polacek  <polacek@redhat.com>
 
        PR middle-end/79536
diff --git a/gcc/testsuite/gcc.dg/pr79574.c b/gcc/testsuite/gcc.dg/pr79574.c
new file mode 100644 (file)
index 0000000..1b666e2
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR rtl-optimization/79574 */
+/* { dg-do compile } */
+/* { dg-options "-Os --param gcse-cost-distance-ratio=2147483647" } */
+
+void a (void)
+{
+  volatile int b;
+  for (;; b)
+    ;
+}