On Mon, Nov 09, 2020 at 10:34:00PM +0100, Jakub Jelinek via Gcc-patches wrote:
> On Mon, Nov 09, 2020 at 02:35:58PM -0500, Jason Merrill wrote:
> > How about calling warn_if_unused_value instead of the new
> > warn_if_unused_value_p?
> 
> That seems to work if I just replace the warning_at call with
> warn_if_unused_value call (at least no regression in check-c++-all and
> libstdc++ testsuite).
> Initially I've tried just calling warn_if_unused_value without the NOP_EXPR
> stripping and code/tclass checks, but that regressed a few tests, e.g.
> g++.dg/warn/Wunused-14.C or c-c++-common/Wunused-var-9.c or 3 lines
> in the new test, e.g. because STATEMENT_LIST or CLEANUP_POINT_EXPRs would
> make it through and resulted in bogus warnings.

Bootstrapped/regtested on x86_64-linux and i686-linux successfully now.
If we wanted to simplify, I think the && !(code == ....) part could be
dropped too, i.e. just
              if (tclass == tcc_comparison
                  || tclass == tcc_unary
                  || tclass == tcc_binary
                  || code == VEC_PERM_EXPR
                  || code == VEC_COND_EXPR)
                warn_if_unused_value (e, loc);
because warn_if_unused_value already returns false on those codes.

> +           enum tree_code code = TREE_CODE (e);
> +           enum tree_code_class tclass = TREE_CODE_CLASS (code);
> +           if (tclass == tcc_comparison
> +               || tclass == tcc_unary
> +               || (tclass == tcc_binary
> +                   && !(code == MODIFY_EXPR
> +                        || code == INIT_EXPR
> +                        || code == PREDECREMENT_EXPR
> +                        || code == PREINCREMENT_EXPR
> +                        || code == POSTDECREMENT_EXPR
> +                        || code == POSTINCREMENT_EXPR))
> +               || code == VEC_PERM_EXPR
> +               || code == VEC_COND_EXPR)
> +             warn_if_unused_value (e, loc);
>           }
>       }
>        expr = build1 (CONVERT_EXPR, void_type_node, expr);

        Jakub

Reply via email to