On Mon, May 26, 2025 at 4:27 PM Jason Merrill <ja...@redhat.com> wrote:
>
> Tested x86_64-pc-linux-gnu, OK for trunk?

LGTM.

Richard.

> Iain, will you verify that one of your coroutine testcases breaks without this
> fix?  I don't think lambda or anonymous union uses of DECL_VALUE_EXPR can 
> break
> in the same way, though this change is also correct for them.
>
> -- 8< --
>
> This PR noted that fold_truth_andor was wrongly changing && to & where the
> RHS is a VAR_DECL with DECL_VALUE_EXPR; we can't assume that such can be
> evaluated unconditionally.
>
> To be more precise we could recurse into DECL_VALUE_EXPR, but that doesn't
> seem worth bothering with since typical uses involve a COMPONENT_REF, which
> is not simple.
>
>         PR c++/120400
>
> gcc/ChangeLog:
>
>         * fold-const.cc (simple_operand_p): False for vars with
>         DECL_VALUE_EXPR.
> ---
>  gcc/fold-const.cc | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
> index 5f48ced5063..014f4218793 100644
> --- a/gcc/fold-const.cc
> +++ b/gcc/fold-const.cc
> @@ -5085,6 +5085,11 @@ simple_operand_p (const_tree exp)
>                  #pragma weak, etc).  */
>               && ! TREE_PUBLIC (exp)
>               && ! DECL_EXTERNAL (exp)
> +             /* DECL_VALUE_EXPR will expand to something non-simple.  */
> +             && ! ((VAR_P (exp)
> +                    || TREE_CODE (exp) == PARM_DECL
> +                    || TREE_CODE (exp) == RESULT_DECL)
> +                   && DECL_HAS_VALUE_EXPR_P (exp))
>               /* Weakrefs are not safe to be read, since they can be NULL.
>                  They are !TREE_PUBLIC && !DECL_EXTERNAL but still
>                  have DECL_WEAK flag set.  */
>
> base-commit: f59ff19bc3d37f4dd159db541ed4f07efb10fcc8
> --
> 2.49.0
>

Reply via email to