From 4228997795917ab648bc7b58b9497e877ae8b92a Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 21 Jun 2007 14:54:47 +0000 Subject: [PATCH] re PR tree-optimization/32453 (ICE in build2_stat, at tree.c:3074 (extract_range_from_assert)) 2007-06-21 Richard Guenther PR tree-optimization/32453 * tree-vrp.c (extract_range_from_assert): Build POINTER_PLUS_EXPR for pointer anti-range. * gcc.c-torture/compile/pr32453.c: New testcase. From-SVN: r125922 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr32453.c | 11 +++++++++++ gcc/tree-vrp.c | 5 ++++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr32453.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2195e4154a2..4e0d1ddb4e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-21 Richard Guenther + + PR tree-optimization/32453 + * tree-vrp.c (extract_range_from_assert): Build POINTER_PLUS_EXPR + for pointer anti-range. + 2007-06-21 H.J. Lu * config/i386/i386.c (processor_target_table): Increase maximum diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 81721f9db21..cdcf8fb6ab9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-21 Richard Guenther + + PR tree-optimization/32453 + * gcc.c-torture/compile/pr32453.c: New testcase. + 2007-06-21 Jakub Jelinek PR tree-optimization/31866 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32453.c b/gcc/testsuite/gcc.c-torture/compile/pr32453.c new file mode 100644 index 00000000000..bdabac76d71 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr32453.c @@ -0,0 +1,11 @@ +void ucs2reverse_internal_loop_single (long *irreversible, int foo) +{ + unsigned char bytebuf[2]; + const unsigned char *inptr = bytebuf; + if (irreversible == (void *)0) + ; + else + inptr += 2; + if (inptr != bytebuf) + ((inptr - bytebuf > foo) ? (void) (0) : __assert_fail ()); +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 8fba946ff6a..937a76b7046 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -1473,10 +1473,13 @@ extract_range_from_assert (value_range_t *vr_p, tree expr) } min = positive_overflow_infinity (TREE_TYPE (var_vr->min)); } - else + else if (!POINTER_TYPE_P (TREE_TYPE (var_vr->min))) min = fold_build2 (PLUS_EXPR, TREE_TYPE (var_vr->min), anti_max, build_int_cst (TREE_TYPE (var_vr->min), 1)); + else + min = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (var_vr->min), + anti_max, size_int (1)); max = real_max; set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv); } -- 2.30.2