aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2007-06-05 13:18:22 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2007-06-05 13:18:22 +0000
commit3fe5bcaf11efc74817ef5b4d0b612b6f5cb21388 (patch)
treefac4c70bb3a0a0a1d278aa6d8e22121f701e942b
parenta176d60f9d8fab161a44994bbd37b883d995e428 (diff)
downloadgcc-3fe5bcaf11efc74817ef5b4d0b612b6f5cb21388.zip
gcc-3fe5bcaf11efc74817ef5b4d0b612b6f5cb21388.tar.gz
gcc-3fe5bcaf11efc74817ef5b4d0b612b6f5cb21388.tar.bz2
tree-vrp.c (compare_values_warnv): Check TREE_NO_WARNING on a PLUS_EXPR or MINUS_EXPR node before setting...
./: * tree-vrp.c (compare_values_warnv): Check TREE_NO_WARNING on a PLUS_EXPR or MINUS_EXPR node before setting *strict_overflow_p. (extract_range_from_assert): Set TREE_NO_WARNING when creating an expression. (test_for_singularity): Likewise. testsuite/: * gcc.dg/Wstrict-overflow-19.c: New test. From-SVN: r125334
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/Wstrict-overflow-19.c15
-rw-r--r--gcc/tree-vrp.c12
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4ea1037..8da0981 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-06-05 Ian Lance Taylor <iant@google.com>
+
+ * tree-vrp.c (compare_values_warnv): Check TREE_NO_WARNING on a
+ PLUS_EXPR or MINUS_EXPR node before setting *strict_overflow_p.
+ (extract_range_from_assert): Set TREE_NO_WARNING when creating an
+ expression.
+ (test_for_singularity): Likewise.
+
2007-06-05 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/constraints.md ("Y2"): Replaced by ...
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8ec62e8..9455213 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2007-06-05 Ian Lance Taylor <iant@google.com>
+
+ * gcc.dg/Wstrict-overflow-19.c: New test.
+
2007-06-05 Razya Ladelsky <razya@il.ibm.com>
* gcc.dg/matrix/matrix-6.c: Remove conversion.
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-19.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-19.c
new file mode 100644
index 0000000..daf98b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-19.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow" } */
+
+/* Don't warn about an overflow when threading jumps. We used to get
+ a warning from comparing bounds generated by VRP. */
+
+int
+bar(int a, int b, int n)
+{
+ if (b > a)
+ n = a - b;
+ if (a >= b)
+ n = 1;
+ return n;
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 1867377..7506092 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -837,7 +837,9 @@ compare_values_warnv (tree val1, tree val2, bool *strict_overflow_p)
if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (val1)))
return -2;
- if (strict_overflow_p != NULL)
+ if (strict_overflow_p != NULL
+ && (code1 == SSA_NAME || !TREE_NO_WARNING (val1))
+ && (code2 == SSA_NAME || !TREE_NO_WARNING (val2)))
*strict_overflow_p = true;
if (code1 == SSA_NAME)
@@ -1252,6 +1254,8 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
{
tree one = build_int_cst (type, 1);
max = fold_build2 (MINUS_EXPR, type, max, one);
+ if (EXPR_P (max))
+ TREE_NO_WARNING (max) = 1;
}
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
@@ -1285,6 +1289,8 @@ extract_range_from_assert (value_range_t *vr_p, tree expr)
{
tree one = build_int_cst (type, 1);
min = fold_build2 (PLUS_EXPR, type, min, one);
+ if (EXPR_P (min))
+ TREE_NO_WARNING (min) = 1;
}
set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
@@ -5646,6 +5652,8 @@ test_for_singularity (enum tree_code cond_code, tree op0,
{
tree one = build_int_cst (TREE_TYPE (op0), 1);
max = fold_build2 (MINUS_EXPR, TREE_TYPE (op0), max, one);
+ if (EXPR_P (max))
+ TREE_NO_WARNING (max) = 1;
}
}
else if (cond_code == GE_EXPR || cond_code == GT_EXPR)
@@ -5659,6 +5667,8 @@ test_for_singularity (enum tree_code cond_code, tree op0,
{
tree one = build_int_cst (TREE_TYPE (op0), 1);
min = fold_build2 (PLUS_EXPR, TREE_TYPE (op0), min, one);
+ if (EXPR_P (min))
+ TREE_NO_WARNING (min) = 1;
}
}