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

--- Comment #8 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:30529e2faa482bc749c65a490763dbc2ccaf63ac

commit r10-8470-g30529e2faa482bc749c65a490763dbc2ccaf63ac
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu Jul 9 20:44:05 2020 -0400

    c++: Fix tentative parsing of enum-specifier [PR96077]

    Here's an interesting issue: in this code a ) is missing:

      enum { E = (2 } e;

    but we compile the code anyway, and E is set to 0 in build_enumerator,
    which is sneaky.

    The problem is that cp_parser_enum_specifier parses tentatively, because
    when we see the enum keyword, we don't know yet if we'll find an
    enum-specifier, opaque-enum-declaration, or elaborated-enum-specifier.

    In this test when we call cp_parser_enumerator_list we're still parsing
    tentatively, and as a consequence, parens.require_close (parser) in
    cp_parser_primary_expression doesn't report any errors.  But we only go
    on to parse the enumerator-list after we've seen a {, at which point we
    might as well commit -- we know we're dealing with an enum-specifier.

    gcc/cp/ChangeLog:

            PR c++/96077
            * parser.c (cp_parser_enum_specifier): Commit to tentative parse
            after we've seen an opening brace.

    gcc/testsuite/ChangeLog:

            PR c++/96077
            * g++.dg/parse/enum14.C: New test.

    (cherry picked from commit 4fd124a23664c712f1bb1a7e91fa23fe83d72c0b)

Reply via email to