mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 09:50:33 +08:00
fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR, *_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR.
* fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR, *_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR. testsuite: * gcc.dg/compare5.c: New testcase. From-SVN: r45148
This commit is contained in:
parent
271e349bc3
commit
ada1133554
@ -1,3 +1,8 @@
|
||||
2001-08-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR,
|
||||
*_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR.
|
||||
|
||||
2001-08-23 Jason Merrill <jason_merrill@redhat.com>
|
||||
|
||||
* c-pragma.h: Move weak_syms and weak_decls...
|
||||
|
@ -7397,6 +7397,17 @@ tree_expr_nonnegative_p (t)
|
||||
return 1;
|
||||
case INTEGER_CST:
|
||||
return tree_int_cst_sgn (t) >= 0;
|
||||
case TRUNC_DIV_EXPR:
|
||||
case CEIL_DIV_EXPR:
|
||||
case FLOOR_DIV_EXPR:
|
||||
case ROUND_DIV_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 0))
|
||||
&& tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
|
||||
case TRUNC_MOD_EXPR:
|
||||
case CEIL_MOD_EXPR:
|
||||
case FLOOR_MOD_EXPR:
|
||||
case ROUND_MOD_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
|
||||
case COND_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 1))
|
||||
&& tree_expr_nonnegative_p (TREE_OPERAND (t, 2));
|
||||
@ -7412,6 +7423,10 @@ tree_expr_nonnegative_p (t)
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
|
||||
case BIND_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
|
||||
case SAVE_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
|
||||
case NON_LVALUE_EXPR:
|
||||
return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
|
||||
case RTL_EXPR:
|
||||
return rtl_expr_nonnegative_p (RTL_EXPR_RTL (t));
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-08-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* gcc.dg/compare5.c: New testcase.
|
||||
|
||||
2001-08-23 Jason Merrill <jason_merrill@redhat.com>
|
||||
|
||||
* lib/prune.exp (prune_gcc_output): Also ignore "In constructor"
|
||||
|
41
gcc/testsuite/gcc.dg/compare5.c
Normal file
41
gcc/testsuite/gcc.dg/compare5.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* Test for a bogus warning on comparison between signed and unsigned.
|
||||
Origin: Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 8/21/2001. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wsign-compare" } */
|
||||
|
||||
extern void bar(void);
|
||||
|
||||
int foo(int x, int y, unsigned u)
|
||||
{
|
||||
/* A *_DIV_EXPR is non-negative if both operands are. */
|
||||
|
||||
if (u < ((x=-22)/33)) /* { dg-warning "signed and unsigned" "DIV_EXPR" } */
|
||||
return x;
|
||||
|
||||
if (u < ((x=22)/33))
|
||||
return x;
|
||||
|
||||
if (u < ((x=22)/(y=33)))
|
||||
return x;
|
||||
|
||||
if (u < (((x&0x10000)?128:64) / ((y&0x10000)?8:4)))
|
||||
return x;
|
||||
|
||||
|
||||
/* A *_MOD_EXPR is non-negative if the first operand is. */
|
||||
|
||||
if (u < ((x=-22)%33)) /* { dg-warning "signed and unsigned" "MOD_EXPR" } */
|
||||
return x;
|
||||
|
||||
if (u < ((x=22)%-33))
|
||||
return x;
|
||||
|
||||
if (u < ((x==y)%-33))
|
||||
return x;
|
||||
|
||||
if (u < (((x=22)/33)%-33))
|
||||
return x;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user