88e3805d76
* fold-const.c (tree_expr_nonnegative_p): Detect more non-negative cases. testsuite: * g++.old-deja/g++.warn/compare1.C: New test. * gcc.dg/compare4.c: New test. From-SVN: r42365
37 lines
969 B
C
37 lines
969 B
C
// Build don't link:
|
|
// Special g++ Options: -ansi -pedantic-errors -Wsign-compare
|
|
|
|
// Copyright (C) 2001 Free Software Foundation, Inc.
|
|
// Contributed by Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 5/13/2001
|
|
|
|
int foo(int x, int y, unsigned u)
|
|
{
|
|
/* A MAX_EXPR is non-negative if EITHER argument to the MAX_EXPR is
|
|
determined to be non-negative. */
|
|
if (u < (x >? -1)) // WARNING - signed and unsigned
|
|
return x;
|
|
if (u < (x >? 10))
|
|
return x;
|
|
if ((10 >? x) < u)
|
|
return x;
|
|
if (u < (x >? (y ? (x==y) : 10)))
|
|
return x;
|
|
if (((y ? 10 : (x==y)) >? x) < u)
|
|
return x;
|
|
|
|
/* A MIN_EXPR is non-negative if BOTH arguments to the MIN_EXPR are
|
|
determined to be non-negative. */
|
|
if (u < ((x?11:8) <? -1)) // WARNING - signed and unsigned
|
|
return x;
|
|
if (u < ((x?11:8) <? 10))
|
|
return x;
|
|
if ((10 <? (x?8:11)) < u)
|
|
return x;
|
|
if (u < ((x?11:(x==y)) <? 10))
|
|
return x;
|
|
if ((10 <? (x?(x==y):11)) < u)
|
|
return x;
|
|
|
|
return 0;
|
|
}
|