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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-9 branch has been updated by Patrick Palka
<ppa...@gcc.gnu.org>:

https://gcc.gnu.org/g:4df77364f7fd9ce88c012843fff124346e4d3c06

commit r9-10155-g4df77364f7fd9ce88c012843fff124346e4d3c06
Author: Patrick Palka <ppa...@redhat.com>
Date:   Tue Jan 25 15:04:49 2022 -0500

    c++: deleted fn and noexcept inst [PR101532, PR104225]

    Here when attempting to use B's implicitly deleted default constructor,
    mark_used rightfully returns false, but for the wrong reason: it
    tries to instantiate the synthesized noexcept specifier which then only
    silently fails because get_defaulted_eh_spec suppresses diagnostics
    for deleted functions.  This lack of diagnostics causes us to crash on
    the first testcase below (thanks to the assert in finish_expr_stmt), and
    silently accept the second testcase.

    To fix this, this patch makes mark_used avoid attempting to instantiate
    the noexcept specifier of a deleted function, so that we'll instead
    directly reject (and diagnose) the function due to its deletedness.

            PR c++/101532
            PR c++/104225

    gcc/cp/ChangeLog:

            * decl2.c (mark_used): Don't consider maybe_instantiate_noexcept
            on a deleted function.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/nsdmi-template21.C: New test.
            * g++.dg/cpp0x/nsdmi-template21a.C: New test.

    (cherry picked from commit bc90dd0ecf02e11d47d1af7f627e2e2acaa40106)

Reply via email to