How to easily identify that a FUNCTION_DECL is a lambda
Richard Biener
richard.guenther@gmail.com
Mon Jul 16 16:04:00 GMT 2018
On July 16, 2018 4:30:42 PM GMT+02:00, Nathan Sidwell <nathan@acm.org> wrote:
>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.
Just use a spare bit in function_decl, then we can simply stream it.
Richard.
>nathan
More information about the Gcc
mailing list