From: Roger Sayle Date: Fri, 2 Dec 2005 04:40:05 +0000 (+0000) Subject: tree.h (TREE_OVERFLOW): Make this flag/predicate specific to constant nodes, i.e. X-Git-Tag: releases/gcc-4.2.0~5626 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=87f2a9f57bfc1a95934202110badb4d1a31409ed;p=thirdparty%2Fgcc.git tree.h (TREE_OVERFLOW): Make this flag/predicate specific to constant nodes, i.e. * tree.h (TREE_OVERFLOW): Make this flag/predicate specific to constant nodes, i.e. INTEGER_CST, REAL_CST, etc... * tree-vrp.c (compare_values): Only check TREE_OVERFLOW for integer constant comparisons. ada/ * utils.c (max_size): Only test for TREE_OVERFLOW on INTEGER_CST nodes. From-SVN: r107870 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ea64c3b95e80..a3c113adcff0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-12-01 Roger Sayle + + * tree.h (TREE_OVERFLOW): Make this flag/predicate specific to + constant nodes, i.e. INTEGER_CST, REAL_CST, etc... + * tree-vrp.c (compare_values): Only check TREE_OVERFLOW for + integer constant comparisons. + 2005-12-02 Jon Grimm Janis Johnson David Edelsohn diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9ce822311f97..74ebace0d31a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2005-12-01 Roger Sayle + + * utils.c (max_size): Only test for TREE_OVERFLOW on INTEGER_CST + nodes. + 2005-11-23 Laurent GUERBY * mlib-prj.adb (Build_Library): Initialize Delete. diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index 2bfafce9b51f..0e0153ffb731 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -2031,12 +2031,19 @@ max_size (tree exp, bool max_p) Likewise, handle a MINUS_EXPR or PLUS_EXPR with the LHS overflowing or the maximum possible value and the RHS a variable. */ - if (max_p && code == MIN_EXPR && TREE_OVERFLOW (rhs)) + if (max_p + && code == MIN_EXPR + && TREE_CODE (rhs) == INTEGER_CST + && TREE_OVERFLOW (rhs)) return lhs; - else if (max_p && code == MIN_EXPR && TREE_OVERFLOW (lhs)) + else if (max_p + && code == MIN_EXPR + && TREE_CODE (lhs) == INTEGER_CST + && TREE_OVERFLOW (lhs)) return rhs; else if ((code == MINUS_EXPR || code == PLUS_EXPR) - && ((TREE_CONSTANT (lhs) && TREE_OVERFLOW (lhs)) + && ((TREE_CODE (lhs) == INTEGER_CST + && TREE_OVERFLOW (lhs)) || operand_equal_p (lhs, TYPE_MAX_VALUE (type), 0)) && !TREE_CONSTANT (rhs)) return lhs; diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index af632e6f6e2d..0797b5c028a4 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -528,12 +528,14 @@ compare_values (tree val1, tree val2) if (!is_gimple_min_invariant (val1) || !is_gimple_min_invariant (val2)) return -2; - /* We cannot compare overflowed values. */ - if (TREE_OVERFLOW (val1) || TREE_OVERFLOW (val2)) - return -2; - if (!POINTER_TYPE_P (TREE_TYPE (val1))) - return tree_int_cst_compare (val1, val2); + { + /* We cannot compare overflowed values. */ + if (TREE_OVERFLOW (val1) || TREE_OVERFLOW (val2)) + return -2; + + return tree_int_cst_compare (val1, val2); + } else { tree t; diff --git a/gcc/tree.h b/gcc/tree.h index eace8b447f96..2a1d6e2664e9 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -335,7 +335,6 @@ struct tree_common GTY(()) TREE_OVERFLOW in INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST - ??? and other expressions? TREE_PUBLIC in VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE ASM_VOLATILE_P in @@ -907,11 +906,9 @@ extern void tree_operand_check_failed (int, enum tree_code, /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means there was an overflow in folding, and no warning has been issued for this subexpression. TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, - but not vice versa. + but not vice versa. */ - ??? Apparently, lots of code assumes this is defined in all - expressions. */ -#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag) +#define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->common.public_flag) /* In a VAR_DECL or FUNCTION_DECL, nonzero means name is to be accessible from outside this module.