On Wed, 2015-12-16 at 15:58 +0100, Marek Polacek wrote:
> The following improves the location for "statement with no effect" warning by
> using the location of the expression if available.  Can't use EXPR_LOCATION as
> *_DECLs still don't carry a location.

Out of interest, does it emit sane underlined ranges for these cases,
with the patch?

> Bootstrapped/regtested on x86_64-linux, ok for trunk?
> 
> 2015-12-16  Marek Polacek  <pola...@redhat.com>
> 
>       PR c/64637
>       * c-typeck.c (c_process_expr_stmt): Use location of the expression if
>       available.
> 
>       * gcc.dg/pr64637.c: New test.
> 
> diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
> index 9d6c604..a147ac6 100644
> --- gcc/c/c-typeck.c
> +++ gcc/c/c-typeck.c
> @@ -10131,7 +10131,7 @@ c_process_expr_stmt (location_t loc, tree expr)
>       out which is the result.  */
>    if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
>        && warn_unused_value)
> -    emit_side_effect_warnings (loc, expr);
> +    emit_side_effect_warnings (EXPR_LOC_OR_LOC (expr, loc), expr);
>  
>    exprv = expr;
>    while (TREE_CODE (exprv) == COMPOUND_EXPR)
> diff --git gcc/testsuite/gcc.dg/pr64637.c gcc/testsuite/gcc.dg/pr64637.c
> index e69de29..779ff50 100644
> --- gcc/testsuite/gcc.dg/pr64637.c
> +++ gcc/testsuite/gcc.dg/pr64637.c
> @@ -0,0 +1,25 @@
> +/* PR c/64637 */
> +/* { dg-do compile } */
> +/* { dg-options "-Wunused" } */
> +
> +void g ();
> +
> +void
> +f (int b)
> +{
> +  for (int i = 0; i < b; i + b) /* { dg-warning "28:statement with no 
> effect" } */
> +    g ();
> +  // PARM_DECLs still don't have a location, don't expect an exact location.
> +  for (int i = 0; i < b; b) /* { dg-warning "statement with no effect" } */
> +    g ();
> +  for (int i = 0; i < b; !i) /* { dg-warning "26:statement with no effect" } 
> */
> +    g ();
> +  for (!b;;) /* { dg-warning "8:statement with no effect" } */
> +    g ();
> +  for (;; b * 2) /* { dg-warning "13:statement with no effect" } */
> +    g ();
> +  ({
> +     b / 5; /* { dg-warning "8:statement with no effect" } */
> +     b ^ 5;
> +   });
> +}
> 
>       Marek


Reply via email to