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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ppalka at gcc dot gnu.org

--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> ---
(In reply to Jason Merrill from comment #4)
> The underlying problem is that we tsubst_lambda_expr three times for the
> same arguments, producing three different lambdas:
> 
> 1) when forming the type of A<>::f
> 2) when forming the parameters of A<>::f

FWIW maybe_rebuild_function_decl_type ought to fix up the function type of f to
agree with the formal parameter type in this case.

> 3) when instantiating A<>::f
> 
> before r15-7202 we silently ended up with #3 and got the mangling wrong. 
> But now they all have the same mangling, so they collide.
> 
> The fix should be to only instantiate the lambda once, whether that's
> something specific to lambdas or more generally by only doing
> tsubst_arg_types/lookup_template_class once for B<...>.
I wonder if regenerate_decl_from_template could avoid doing the parameter
declaration merging stuff if the function has not been redeclared/can't be
redeclared?  In particular for a function whose signature contains a lambda,
IIUC it definitely can't be redeclared.

Reply via email to