aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2000-04-08 04:45:18 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2000-04-08 04:45:18 +0000
commit3facde269a04c33b91becb5cf4397fb69077895d (patch)
treeffab24c880d3a50de4e3ea9bfc57f63e27c41487 /gcc/tree.c
parent155d8a473c79aa5a557ee37306f83b28353b06d4 (diff)
downloadgcc-3facde269a04c33b91becb5cf4397fb69077895d.zip
gcc-3facde269a04c33b91becb5cf4397fb69077895d.tar.gz
gcc-3facde269a04c33b91becb5cf4397fb69077895d.tar.bz2
tree.c (tree_expr_nonnegative_p): New function.
* tree.c (tree_expr_nonnegative_p): New function. * tree.h (tree_expr_nonnegative_p): Declare. * c-typeck.c (build_binary_op): Call `tree_expr_nonnegative_p' to elide some sign_compare warnings. (build_conditional_expr): Likewise. cp: * typeck.c (build_binary_op): Call `tree_expr_nonnegative_p' to elide some sign_compare warnings. From-SVN: r33019
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 53ca207..66078e5 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4370,6 +4370,25 @@ tree_int_cst_sgn (t)
return 1;
}
+/* Return true if `t' is known to be non-negative. */
+
+int
+tree_expr_nonnegative_p (t)
+ tree t;
+{
+ switch (TREE_CODE (t))
+ {
+ case INTEGER_CST:
+ return tree_int_cst_sgn (t) >= 0;
+ case COND_EXPR:
+ return tree_expr_nonnegative_p (TREE_OPERAND (t, 1))
+ && tree_expr_nonnegative_p (TREE_OPERAND (t, 2));
+ default:
+ /* We don't know sign of `t', so be safe and return false. */
+ return 0;
+ }
+}
+
/* Compare two constructor-element-type constants. Return 1 if the lists
are known to be equal; otherwise return 0. */