* error.c (dump_function_decl): Use standard diagnostic flow to dump a lambda diagnostic, albeit without stating the function name or duplicating the parameter spec (which is dumped as part of the type). --- gcc/cp/error.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 440169a..bd5f8cc 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1374,14 +1374,7 @@ dump_function_decl (tree t, int flags) int do_outer_scope = ! (flags & TFF_UNQUALIFIED_NAME); tree exceptions; vec<tree, va_gc> *typenames = NULL; - - if (DECL_NAME (t) && LAMBDA_FUNCTION_P (t)) - { - /* A lambda's signature is essentially its "type", so defer. */ - gcc_assert (LAMBDA_TYPE_P (DECL_CONTEXT (t))); - dump_type (DECL_CONTEXT (t), flags); - return; - } + bool lambda_p = false; flags &= ~(TFF_UNQUALIFIED_NAME | TFF_TEMPLATE_NAME); if (TREE_CODE (t) == TEMPLATE_DECL) @@ -1443,16 +1436,23 @@ dump_function_decl (tree t, int flags) else if (cname) { dump_type (cname, flags); - pp_cxx_colon_colon (cxx_pp); + if (LAMBDA_TYPE_P (cname)) + lambda_p = true; + else + pp_cxx_colon_colon (cxx_pp); } else dump_scope (CP_DECL_CONTEXT (t), flags); - dump_function_name (t, flags); + /* A lambda's signature is essentially its "type", which has already been + dumped. */ + if (!lambda_p) + dump_function_name (t, flags); if (!(flags & TFF_NO_FUNCTION_ARGUMENTS)) { - dump_parameters (parmtypes, flags); + if (!lambda_p) + dump_parameters (parmtypes, flags); if (TREE_CODE (fntype) == METHOD_TYPE) { -- 1.8.3