From 94638c46668f9fcce4fe4b782b58ac9409221af2 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 22 Mar 2017 13:28:00 +0100 Subject: [PATCH] Backport r245531 2017-03-22 Martin Liska Backport from mainline 2017-02-17 Martin Liska PR rtl-optimization/79574 * gcse.c (want_to_gcse_p): Prevent integer overflow. 2017-03-22 Martin Liska Backport from mainline 2017-02-17 Martin Liska PR rtl-optimization/79574 * gcc.dg/pr79574.c: New test. From-SVN: r246367 --- gcc/ChangeLog | 8 ++++++++ gcc/gcse.c | 5 +++-- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr79574.c | 10 ++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr79574.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9fdcec4baa94..837cf8844a2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-17 Martin Liska + + PR rtl-optimization/79574 + * gcse.c (want_to_gcse_p): Prevent integer overflow. + 2017-03-22 Martin Liska Backport from mainline diff --git a/gcc/gcse.c b/gcc/gcse.c index 0f6d456ab392..c6bea33c6d23 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -824,7 +824,7 @@ want_to_gcse_p (rtx x, 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)); @@ -832,7 +832,8 @@ want_to_gcse_p (rtx x, 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3437c8ab93b2..26364074722e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-03-22 Martin Liska + + Backport from mainline + 2017-02-17 Martin Liska + + PR rtl-optimization/79574 + * gcc.dg/pr79574.c: New test. + 2017-03-21 Martin Sebor PR c++/79548 diff --git a/gcc/testsuite/gcc.dg/pr79574.c b/gcc/testsuite/gcc.dg/pr79574.c new file mode 100644 index 000000000000..1b666e20d217 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr79574.c @@ -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) + ; +} -- 2.47.2