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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Marek Polacek
<mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:3bb551c6751304fb2d51cc8569f066dd8a9090e2

commit r10-9682-g3bb551c6751304fb2d51cc8569f066dd8a9090e2
Author: Marek Polacek <pola...@redhat.com>
Date:   Fri Jan 8 15:48:41 2021 -0500

    c++: ICE when late parsing noexcept/NSDMI [PR98333]

    Since certain members of a class are a complete-class context
    [class.mem.general]p7, we delay their parsing untile the whole class has
    been parsed.  For instance, NSDMIs and noexcept-specifiers.  The order
    in which we perform this delayed parsing matters; we were first parsing
    NSDMIs and only they did we parse noexcept-specifiers.   That turns out
    to be wrong: since NSDMIs may use noexcept-specifiers, we must process
    noexcept-specifiers first.  Otherwise we'll ICE in code that doesn't
    expect to see DEFERRED_PARSE.

    This doesn't just shift the problem, noexcept-specifiers can use members
    with a NSDMI just fine, and I've also tested a similar test with this
    member function:

      bool f() { return __has_nothrow_constructor (S<true>); }

    and that compiled fine too.

    gcc/cp/ChangeLog:

            PR c++/98333
            * parser.c (cp_parser_class_specifier_1): Perform late-parsing
            of NSDMIs before late-parsing of noexcept-specifiers.

    gcc/testsuite/ChangeLog:

            PR c++/98333
            * g++.dg/cpp0x/noexcept62.C: New test.

    (cherry picked from commit c37f1d4081f5a19e39192d13e2a3acea13662e5a)

Reply via email to