aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-02-01 11:08:26 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-02-01 11:08:26 +0100
commit31b6733b1628a861de4c545bff40acc97850dbbf (patch)
treef42a2adeb53b018ecc56134e5735e062d67b17fa /gcc/tree-data-ref.c
parenteae4d8fbb529d67428a2b0eba407b975ee13e7d1 (diff)
downloadgcc-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.c4
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);