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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tomasz Kaminski <tkami...@gcc.gnu.org>:

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

commit r16-2746-gd49d359b0c5266b314bcf31405746909d99927a1
Author: Tomasz KamiÅski <tkami...@redhat.com>
Date:   Fri Aug 1 09:21:27 2025 +0200

    libstdc++: Fix dereferencing of std::indirect xvalues [PR121128]

    Forr rvalues the _Self parameter deduces a non-reference type.
Consequently,
    ((_Self)__self) moved the object to a temporary, which then destroyed on
    function exit.

    This patch fixes this by using a C-style cast __self to (const indirect&).
    This not only resolves the above issue but also correctly handles types
that
    are derived (publicly and privately) from indirect. Allocator requirements
in
    [allocator.requirements.general] p22 guarantee that dereferencing const
_M_objp
    works with equivalent semantics to dereferencing _M_objp.

            PR libstdc++/121128

    libstdc++-v3/ChangeLog:

            * include/bits/indirect.h (indirect::operator*):
            Cast __self to approparietly qualified indirect.
            * testsuite/std/memory/indirect/access.cc: New test.
            * testsuite/std/memory/polymorphic/access.cc: New test.

    Reviewed-by: Jonathan Wakely <jwak...@redhat.com>
    Signed-off-by: Tomasz KamiÅski <tkami...@redhat.com>

Reply via email to