diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-02-01 11:08:26 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-02-01 11:08:26 +0100 |
commit | 31b6733b1628a861de4c545bff40acc97850dbbf (patch) | |
tree | f42a2adeb53b018ecc56134e5735e062d67b17fa /gcc/tree-data-ref.c | |
parent | eae4d8fbb529d67428a2b0eba407b975ee13e7d1 (diff) | |
download | gcc-31b6733b1628a861de4c545bff40acc97850dbbf.zip gcc-31b6733b1628a861de4c545bff40acc97850dbbf.tar.gz gcc-31b6733b1628a861de4c545bff40acc97850dbbf.tar.bz2 |
re PR tree-optimization/81661 (ICE in gimplify_modify_expr, at gimplify.c:5638)
PR tree-optimization/81661
PR tree-optimization/84117
* tree-eh.h (rewrite_to_non_trapping_overflow): Declare.
* tree-eh.c: Include gimplify.h.
(find_trapping_overflow, replace_trapping_overflow,
rewrite_to_non_trapping_overflow): New functions.
* tree-vect-loop.c: Include tree-eh.h.
(vect_get_loop_niters): Use rewrite_to_non_trapping_overflow.
* tree-data-ref.c: Include tree-eh.h.
(get_segment_min_max): Use rewrite_to_non_trapping_overflow.
* gcc.dg/pr81661.c: New test.
* gfortran.dg/pr84117.f90: New test.
From-SVN: r257284
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 0b6ad5f..b5c0b7f 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -98,6 +98,7 @@ along with GCC; see the file COPYING3. If not see #include "stringpool.h" #include "tree-vrp.h" #include "tree-ssanames.h" +#include "tree-eh.h" static struct datadep_stats { @@ -1790,7 +1791,8 @@ get_segment_min_max (const dr_with_seg_len &d, tree *seg_min_out, tree addr_base = fold_build_pointer_plus (DR_BASE_ADDRESS (d.dr), DR_OFFSET (d.dr)); addr_base = fold_build_pointer_plus (addr_base, DR_INIT (d.dr)); - tree seg_len = fold_convert (sizetype, d.seg_len); + tree seg_len + = fold_convert (sizetype, rewrite_to_non_trapping_overflow (d.seg_len)); tree min_reach = fold_build3 (COND_EXPR, sizetype, neg_step, seg_len, size_zero_node); |