diff options
author | Ian Lance Taylor <iant@google.com> | 2007-06-05 13:18:22 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2007-06-05 13:18:22 +0000 |
commit | 3fe5bcaf11efc74817ef5b4d0b612b6f5cb21388 (patch) | |
tree | fac4c70bb3a0a0a1d278aa6d8e22121f701e942b /gcc/tree-vrp.c | |
parent | a176d60f9d8fab161a44994bbd37b883d995e428 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 12 |
1 files changed, 11 insertions, 1 deletions
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; } } |