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

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

https://gcc.gnu.org/g:e6e40cb7459c9b21b291fe28e46cd4ebcd924dff

commit r15-7355-ge6e40cb7459c9b21b291fe28e46cd4ebcd924dff
Author: Marek Polacek <pola...@redhat.com>
Date:   Wed Jan 29 15:58:38 2025 -0500

    c++: auto in trailing-return-type in parameter [PR117778]

    This PR describes a few issues, both ICE and rejects-valid, but
    ultimately the problem is that we don't properly synthesize the
    second auto in:

      int
      g (auto fp() -> auto)
      {
        return fp ();
      }

    since r12-5860, which disabled auto_is_implicit_function_template_parm_p
    in cp_parser_parameter_declaration after parsing the decl-specifier-seq.

    If there is no trailing auto, there is no problem.

    So we have to make sure auto_is_implicit_function_template_parm_p is
    properly set when parsing the trailing auto.  A complication is that
    one can write:

      auto f (auto fp(auto fp2() -> auto) -> auto) -> auto;
                                          ~~~~~~~

    where only the underlined auto should be synthesized.  So when we
    parse a parameter-declaration-clause inside another
    parameter-declaration-clause, we should not enable the flag.  We
    have no flags to keep track of such nesting, but I think I can walk
    current_binding_level to see if we find ourselves in such an unlikely
    scenario.

            PR c++/117778

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_late_return_type_opt): Maybe override
            auto_is_implicit_function_template_parm_p.
            (cp_parser_parameter_declaration): Move a make_temp_override below.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/lambda-generic-117778.C: New test.
            * g++.dg/cpp2a/abbrev-fn2.C: New test.
            * g++.dg/cpp2a/abbrev-fn3.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>

Reply via email to