PR 33738 * tree-vrp.c (vrp_evaluate_conditional): Revert fix for PR 33738. testsuite/ChangeLog PR 33738 * g++.dg/warn/pr33738.C: Remove. From-SVN: r132124
This commit is contained in:
parent
3a2041755b
commit
c1e7d24012
@ -1,3 +1,11 @@
|
||||
2008-02-05 Diego Novillo <dnovillo@google.com>
|
||||
|
||||
http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00140.html
|
||||
|
||||
PR 33738
|
||||
* tree-vrp.c (vrp_evaluate_conditional): Revert fix for
|
||||
PR 33738.
|
||||
|
||||
2008-02-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
PR other/35070
|
||||
|
@ -1,3 +1,10 @@
|
||||
2008-02-05 Diego Novillo <dnovillo@google.com>
|
||||
|
||||
http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00140.html
|
||||
|
||||
PR 33738
|
||||
* g++.dg/warn/pr33738.C: Remove.
|
||||
|
||||
2008-02-05 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/34945
|
||||
|
@ -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<Alpha>(GetM1());
|
||||
if (a2 == -1) { // { dg-warning "always false due" }
|
||||
link_error ();
|
||||
}
|
||||
if (-1 == a2) { // { dg-warning "always false due" }
|
||||
link_error ();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -5073,48 +5073,6 @@ vrp_evaluate_conditional (tree cond, tree stmt)
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user