https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107329

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:049a52909075117f5112971cc83952af2a818bc1

commit r13-5318-g049a52909075117f5112971cc83952af2a818bc1
Author: Jason Merrill <ja...@redhat.com>
Date:   Mon Jan 23 16:25:07 2023 -0500

    c++: TARGET_EXPR collapsing [PR107303]

    In r13-2978 I tried to eliminate TARGET_EXPR around TARGET_EXPR by
    discarding the outer one, but as in this testcase that breaks if the
    TARGET_EXPR_SLOT of the outer one is used elsewhere.  But it should always
    be safe to strip the inner one; if its slot were reused, there would be a
    COMPOUND_EXPR around the TARGET_EXPR.

    For 107329, if we're setting *walk_subtrees, we also need to fold
    TARGET_EXPR_CLEANUP.

            PR c++/107303
            PR c++/107329

    gcc/cp/ChangeLog:

            * cp-gimplify.cc (cp_fold_r) [TARGET_EXPR]: In case of double
            TARGET_EXPR, keep the outer one instead of the inner one.
            (maybe_replace_decl): New.

    gcc/testsuite/ChangeLog:

            * g++.dg/ext/builtin-shufflevector-5.C: New test.
            * g++.dg/init/new51.C: New test.

Reply via email to