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

--- Comment #1 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:75047f795111150fd10a8f86f5c72deab10cde77

commit r12-6380-g75047f795111150fd10a8f86f5c72deab10cde77
Author: Jason Merrill <ja...@redhat.com>
Date:   Thu Jan 6 13:26:21 2022 -0500

    c++: destroying delete, throw in new-expr [PR100588]

    The standard says that a destroying operator delete is preferred, but that
    only applies to the delete-expression, not the cleanup if a new-expression
    initialization throws.  As a result of this patch, several of the
destroying
    delete tests don't get EH cleanups, but I'm turning off the warning in
cases
    where the initialization can't throw anyway.

    It's unclear what should happen if the class does not declare a
non-deleting
    operator delete; a proposal in CWG was to call the global delete, which
    makes sense to me if the class doesn't declare its own operator new.  If it
    does, we warn and don't call any deallocation function if initialization
    throws.

            PR c++/100588

    gcc/cp/ChangeLog:

            * call.c (build_op_delete_call): Ignore destroying delete
            if alloc_fn.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/destroying-delete5.C: Expect warning.
            * g++.dg/cpp2a/destroying-delete6.C: New test.

Reply via email to