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

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:e9803f10c9f376f6d091e7ef3ad6e1c92e7c8e8c

commit r15-9128-ge9803f10c9f376f6d091e7ef3ad6e1c92e7c8e8c
Author: Marek Polacek <pola...@redhat.com>
Date:   Tue Mar 25 13:36:24 2025 -0400

    c++: fix missing lifetime extension [PR119383]

    Since r15-8011 cp_build_indirect_ref_1 won't do the *&TARGET_EXPR ->
    TARGET_EXPR folding not to change its value category.  That fix seems
    correct but it made us stop extending the lifetime in this testcase,
    causing a wrong-code issue -- extend_ref_init_temps_1 did not see
    through the extra *& because it doesn't use a tree walk.

    This patch reverts r15-8011 and instead handles the problem in
    build_over_call by calling force_lvalue in the is_really_empty_class
    case as well as in the general case.

            PR c++/119383

    gcc/cp/ChangeLog:

            * call.cc (build_over_call): Use force_lvalue to ensure op= returns
            an lvalue.
            * cp-tree.h (force_lvalue): Declare.
            * cvt.cc (force_lvalue): New.
            * typeck.cc (cp_build_indirect_ref_1): Revert r15-8011.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/temp-extend3.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to