diff options
author | Martin Liska <mliska@suse.cz> | 2019-05-15 14:58:53 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-05-15 12:58:53 +0000 |
commit | 86e3947eea1619c83ac45c77ba4b3156d729c81f (patch) | |
tree | a3781e4eba6cdab7bd41b460a06e1f31f60d93f2 /gcc/tree-switch-conversion.c | |
parent | 2092f134b7180cd2542cff93bd8a876b3e59a77b (diff) |
Check for overflow in tree-switch-conversion (PR middle-end/90478).
2019-05-15 Martin Liska <mliska@suse.cz>
PR middle-end/90478
* tree-switch-conversion.c (jump_table_cluster::can_be_handled):
Check for overflow.
2019-05-15 Martin Liska <mliska@suse.cz>
PR middle-end/90478
* gcc.dg/tree-ssa/pr90478-2.c: New test.
* gcc.dg/tree-ssa/pr90478.c: New test.
From-SVN: r271210
Diffstat (limited to 'gcc/tree-switch-conversion.c')
-rw-r--r-- | gcc/tree-switch-conversion.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c index bedeb2fd865..5f8ed46f496 100644 --- a/gcc/tree-switch-conversion.c +++ b/gcc/tree-switch-conversion.c @@ -1284,7 +1284,11 @@ jump_table_cluster::can_be_handled (const vec<cluster *> &clusters, comparison_count += sc->m_range_p ? 2 : 1; } - return 100 * range <= max_ratio * comparison_count; + unsigned HOST_WIDE_INT lhs = 100 * range; + if (lhs < range) + return false; + + return lhs <= max_ratio * comparison_count; } /* Return true if cluster starting at START and ending at END (inclusive) |