re PR c/2098 (compare with unsigned variable - no error reporting)
PR c/2098 * c-common.c (shorten_compare): Simplfy conditions leading to the generation of a warning. * gcc.dg/compare6.c: New. From-SVN: r52778
This commit is contained in:
parent
28ce94d46b
commit
5c5b228389
3 changed files with 20 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
|||
2002-04-25 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR c/2098
|
||||
* c-common.c (shorten_compare): Simplfy conditions leading to
|
||||
the generation of a warning.
|
||||
|
||||
2002-04-25 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR c/2035
|
||||
|
|
|
@ -1999,19 +1999,8 @@ shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
|
|||
type = c_common_unsigned_type (type);
|
||||
}
|
||||
|
||||
if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
|
||||
if (TREE_CODE (primop0) != INTEGER_CST)
|
||||
{
|
||||
/* This is the case of (char)x >?< 0x80, which people used to use
|
||||
expecting old C compilers to change the 0x80 into -0x80. */
|
||||
if (val == boolean_false_node)
|
||||
warning ("comparison is always false due to limited range of data type");
|
||||
if (val == boolean_true_node)
|
||||
warning ("comparison is always true due to limited range of data type");
|
||||
}
|
||||
|
||||
if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
|
||||
{
|
||||
/* This is the case of (unsigned char)x >?< -1 or < 0. */
|
||||
if (val == boolean_false_node)
|
||||
warning ("comparison is always false due to limited range of data type");
|
||||
if (val == boolean_true_node)
|
||||
|
|
13
gcc/testsuite/gcc.dg/compare6.c
Normal file
13
gcc/testsuite/gcc.dg/compare6.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* PR c/2098 */
|
||||
/* Test for a warning on comparison on out-of-range data. */
|
||||
/* { dg-do compile { xfail c4x-*-* } } */
|
||||
/* { dg-options "-Wall" } */
|
||||
|
||||
signed char sc;
|
||||
unsigned char uc;
|
||||
|
||||
void foo()
|
||||
{
|
||||
if (sc == 10000) return; /* { dg-warning "always false" "signed" } */
|
||||
if (uc == 10000) return; /* { dg-warning "always false" "unsigned" } */
|
||||
}
|
Loading…
Add table
Reference in a new issue