Commit 5c5b2283 by Richard Henderson Committed by Richard Henderson

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
parent 28ce94d4
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
* expmed.c (extract_bit_field): Fall through to generic code rather
than aborting on subreg special case.
......
......@@ -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)
......
/* 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" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment