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

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

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

commit r11-6736-gd75199f782348bfc401f925b60f33ffc9822b7cc
Author: Jason Merrill <ja...@redhat.com>
Date:   Wed Jan 13 13:27:06 2021 -0500

    c++: Avoid redundant copy in {} init [PR98642]

    Here, initializing from { } implies a call to the default constructor for
    base.  We were then seeing that we're initializing a base subobject, so we
    tried to copy the result of that call.  This is clearly wrong; we should
    initialize the base directly from its default constructor.

    This patch does a lot of refactoring of unsafe_copy_elision_p and adds
    make_safe_copy_elision that will also try to do the base constructor
    rewriting from the last patch.

    gcc/cp/ChangeLog:

            PR c++/98642
            * call.c (unsafe_return_slot_p): Return int.
            (init_by_return_slot_p): Split out from...
            (unsafe_copy_elision_p): ...here.
            (unsafe_copy_elision_p_opt): New name for old meaning.
            (build_over_call): Adjust.
            (make_safe_copy_elision): New.
            * typeck2.c (split_nonconstant_init_1): Elide copy from safe
            list-initialization.
            * cp-tree.h: Adjust.

    gcc/testsuite/ChangeLog:

            PR c++/98642
            * g++.dg/cpp1z/elide5.C: New test.
  • [Bug c++/98642] [10/11 Regressi... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to