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