How to easily identify that a FUNCTION_DECL is a lambda

Nathan Sidwell nathan@acm.org
Mon Jul 16 14:30:00 GMT 2018


On 07/16/2018 03:23 AM, Martin Liška wrote:
> Hi.
> 
> For purpose of --coverage I would like to distinguish lambda functions
> among DECL_ARTIFICIAL functions. Currently, cp-tree.h provides macro:
> 
> /* Test if FUNCTION_DECL is a lambda function.  */
> #define LAMBDA_FUNCTION_P(FNDECL)				\
>    (DECL_DECLARES_FUNCTION_P (FNDECL)				\
>     && DECL_OVERLOADED_OPERATOR_P (FNDECL)			\
>     && DECL_OVERLOADED_OPERATOR_IS (FNDECL, CALL_EXPR)		\
>     && LAMBDA_TYPE_P (CP_DECL_CONTEXT (FNDECL)))
> 
> That's FE-specific function that probably should not be called from
> middle-end. Any idea how to distinguish lambdas?

You're going to need a language hook.  Lambda fns are just regular 
member fns outside the front-end.  Make the hook more than 
'lambda_fn_p', so it can extend to other exciting C++ features.  Perhaps 
something like:

enum synthetic_fn_kind {
   sfk_none,
   sfk_cxx_lambda,
};
synthetic_fn_kind (*categorize_artificial_fn) (tree decl);

We'll have to expose the union of FE's such sythetic fns to the middle 
end, but at least not how the FE distinguishes them.

Hm, but isn't this info lost if we're in LTO at this point?  Not sure if 
we'll need to propagate this through the LTO streaming.  I guess that's 
a later bug to handle though.

nathan

-- 
Nathan Sidwell



More information about the Gcc mailing list