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

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

https://gcc.gnu.org/g:60979215517629400902938b1c5666f97d0653cf

commit r13-8147-g60979215517629400902938b1c5666f97d0653cf
Author: Marek Polacek <pola...@redhat.com>
Date:   Thu Nov 9 12:25:25 2023 -0500

    c++: fix parsing with auto(x) [PR112410]

    Here we are wrongly parsing

      int y(auto(42));

    which uses the C++23 cast-to-prvalue feature, and initializes y to 42.
    However, we were treating the auto as an implicit template parameter.

    Fixing the auto{42} case is easy, but when auto is followed by a (,
    I found the fix to be much more involved.  For instance, we cannot
    use cp_parser_expression, because that can give hard errors.  It's
    also necessary to disambiguate 'auto(i)' as 'auto i', not a cast.
    auto(), auto(int), auto(f)(int), auto(*), auto(i[]), auto(...), etc.
    are all function declarations.

    This patch rectifies that by undoing the implicit function template
    modification.  In the test above, we should notice that the parameter
    list is ill-formed, and since we've synthesized an implicit template
    parameter, we undo it by calling abort_fully_implicit_template.  Then,
    we'll parse the "(auto(42))" as an initializer.

            PR c++/112410

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_direct_declarator): Maybe call
            abort_fully_implicit_template if it turned out the parameter list
was
            ill-formed.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp23/auto-fncast13.C: New test.
            * g++.dg/cpp23/auto-fncast14.C: New test.

    (cherry picked from commit 70060dadfbf0d0af5f4cab5f3aff3223a4523606)
  • [Bug c++/112410] error when aut... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to