2008-02-05 Diego Novillo PR 33738 * tree-vrp.c (vrp_evaluate_conditional): Revert fix for PR 33738. testsuite/ChangeLog PR 33738 * g++.dg/warn/pr33738.C: Remove. Index: tree-vrp.c =================================================================== --- tree-vrp.c (revision 132111) +++ tree-vrp.c (working copy) @@ -5073,48 +5073,6 @@ vrp_evaluate_conditional (tree cond, tre } } - if (warn_type_limits - && ret - && TREE_CODE_CLASS (TREE_CODE (cond)) == tcc_comparison) - { - /* If the comparison is being folded and the operand on the LHS - is being compared against a constant value that is outside of - the natural range of OP0's type, then the predicate will - always fold regardless of the value of OP0. If -Wtype-limits - was specified, emit a warning. */ - const char *warnmsg = NULL; - tree op0 = TREE_OPERAND (cond, 0); - tree op1 = TREE_OPERAND (cond, 1); - tree type = TREE_TYPE (op0); - value_range_t *vr0 = get_value_range (op0); - - if (vr0->type != VR_VARYING - && INTEGRAL_TYPE_P (type) - && vrp_val_is_min (vr0->min) - && vrp_val_is_max (vr0->max) - && is_gimple_min_invariant (op1)) - { - if (integer_zerop (ret)) - warnmsg = G_("comparison always false due to limited range of " - "data type"); - else - warnmsg = G_("comparison always true due to limited range of " - "data type"); - } - - if (warnmsg) - { - location_t locus; - - if (!EXPR_HAS_LOCATION (stmt)) - locus = input_location; - else - locus = EXPR_LOCATION (stmt); - - warning (OPT_Wextra, "%H%s", &locus, warnmsg); - } - } - return ret; } Index: testsuite/g++.dg/warn/pr33738.C =================================================================== --- testsuite/g++.dg/warn/pr33738.C (revision 132093) +++ testsuite/g++.dg/warn/pr33738.C (working copy) @@ -1,26 +0,0 @@ -// { dg-do run } -// { dg-options "-O2 -Wtype-limits" } -extern void link_error (void); - -enum Alpha { - ZERO = 0, ONE, TWO, THREE -}; - -Alpha a2; - -int m1 = -1; -int GetM1() { - return m1; -} - -int main() { - a2 = static_cast(GetM1()); - if (a2 == -1) { // { dg-warning "always false due" } - link_error (); - } - if (-1 == a2) { // { dg-warning "always false due" } - link_error (); - } - return 0; -} -