re PR c/59846 (Imprecise column number for -Wtype-limits)
PR c/59846 c-family/ * c-common.c (shorten_compare): Add location_t parameter. * c-common.h (shorten_binary_op): Adjust declaration. cp/ * typeck.c (cp_build_binary_op): Pass location to shorten_compare. c/ * c-typeck.c (parser_build_binary_op): Use location instead of input_location. (build_binary_op): Pass location to shorten_compare. testsuite/ * gcc.dg/pr59846.c: New test. From-SVN: r207008
This commit is contained in:
parent
6e23f29678
commit
393e8e8b0c
9 changed files with 75 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59846
|
||||
* c-common.c (shorten_compare): Add location_t parameter.
|
||||
* c-common.h (shorten_binary_op): Adjust declaration.
|
||||
|
||||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/58346
|
||||
|
|
|
@ -3974,13 +3974,15 @@ expr_original_type (tree expr)
|
|||
of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
|
||||
RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
|
||||
|
||||
LOC is the location of the comparison.
|
||||
|
||||
If this function returns nonzero, it means that the comparison has
|
||||
a constant value. What this function returns is an expression for
|
||||
that value. */
|
||||
|
||||
tree
|
||||
shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
|
||||
enum tree_code *rescode_ptr)
|
||||
shorten_compare (location_t loc, tree *op0_ptr, tree *op1_ptr,
|
||||
tree *restype_ptr, enum tree_code *rescode_ptr)
|
||||
{
|
||||
tree type;
|
||||
tree op0 = *op0_ptr;
|
||||
|
@ -3989,7 +3991,6 @@ shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
|
|||
int real1, real2;
|
||||
tree primop0, primop1;
|
||||
enum tree_code code = *rescode_ptr;
|
||||
location_t loc = EXPR_LOC_OR_LOC (op0, input_location);
|
||||
|
||||
/* Throw away any conversions to wider types
|
||||
already present in the operands. */
|
||||
|
|
|
@ -800,7 +800,8 @@ extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwis
|
|||
/* Subroutine of build_binary_op, used for comparison operations.
|
||||
See if the operands have both been converted from subword integer types
|
||||
and, if so, perhaps change them both back to their original type. */
|
||||
extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
|
||||
extern tree shorten_compare (location_t, tree *, tree *, tree *,
|
||||
enum tree_code *);
|
||||
|
||||
extern tree pointer_int_sum (location_t, enum tree_code, tree, tree,
|
||||
bool = true);
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59846
|
||||
* c-typeck.c (parser_build_binary_op): Use location instead of
|
||||
input_location.
|
||||
(build_binary_op): Pass location to shorten_compare.
|
||||
|
||||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/58346
|
||||
|
|
|
@ -3388,11 +3388,11 @@ parser_build_binary_op (location_t location, enum tree_code code,
|
|||
/* Check for cases such as x+y<<z which users are likely
|
||||
to misinterpret. */
|
||||
if (warn_parentheses)
|
||||
warn_about_parentheses (input_location, code,
|
||||
code1, arg1.value, code2, arg2.value);
|
||||
warn_about_parentheses (location, code, code1, arg1.value, code2,
|
||||
arg2.value);
|
||||
|
||||
if (warn_logical_op)
|
||||
warn_logical_operator (input_location, code, TREE_TYPE (result.value),
|
||||
warn_logical_operator (location, code, TREE_TYPE (result.value),
|
||||
code1, arg1.value, code2, arg2.value);
|
||||
|
||||
/* Warn about comparisons against string literals, with the exception
|
||||
|
@ -10891,7 +10891,8 @@ build_binary_op (location_t location, enum tree_code code,
|
|||
tree xop0 = op0, xop1 = op1, xresult_type = result_type;
|
||||
enum tree_code xresultcode = resultcode;
|
||||
tree val
|
||||
= shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
|
||||
= shorten_compare (location, &xop0, &xop1, &xresult_type,
|
||||
&xresultcode);
|
||||
|
||||
if (val != 0)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59846
|
||||
* typeck.c (cp_build_binary_op): Pass location to shorten_compare.
|
||||
|
||||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/58346
|
||||
|
|
|
@ -4838,7 +4838,8 @@ cp_build_binary_op (location_t location,
|
|||
tree xop0 = op0, xop1 = op1, xresult_type = result_type;
|
||||
enum tree_code xresultcode = resultcode;
|
||||
tree val
|
||||
= shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
|
||||
= shorten_compare (location, &xop0, &xop1, &xresult_type,
|
||||
&xresultcode);
|
||||
if (val != 0)
|
||||
return cp_convert (boolean_type_node, val, complain);
|
||||
op0 = xop0, op1 = xop1;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59846
|
||||
* gcc.dg/pr59846.c: New test.
|
||||
|
||||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/58346
|
||||
|
|
39
gcc/testsuite/gcc.dg/pr59846.c
Normal file
39
gcc/testsuite/gcc.dg/pr59846.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* PR c/59846 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wlogical-op -Wtype-limits" } */
|
||||
|
||||
_Bool
|
||||
fn1 (unsigned int p)
|
||||
{
|
||||
return 0UL > p; /* { dg-warning "14:comparison is always false due to limited range of data type" } */
|
||||
}
|
||||
|
||||
_Bool
|
||||
fn2 (unsigned int p)
|
||||
{
|
||||
return 0UL <= p; /* { dg-warning "14:comparison is always true due to limited range of data type" } */
|
||||
}
|
||||
|
||||
_Bool
|
||||
fn3 (unsigned int p)
|
||||
{
|
||||
return p >= 0U; /* { dg-warning "12:comparison of unsigned expression >= 0 is always true" } */
|
||||
}
|
||||
|
||||
_Bool
|
||||
fn4 (unsigned int p)
|
||||
{
|
||||
return p < 0U; /* { dg-warning "12:comparison of unsigned expression < 0 is always false" } */
|
||||
}
|
||||
|
||||
_Bool
|
||||
fn5 (_Bool p)
|
||||
{
|
||||
return p || !p; /* { dg-warning "12:logical" } */
|
||||
}
|
||||
|
||||
_Bool
|
||||
fn6 (_Bool p)
|
||||
{
|
||||
return p && !p; /* { dg-warning "12:logical" } */
|
||||
}
|
Loading…
Add table
Reference in a new issue