This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How to easily identify that a FUNCTION_DECL is a lambda


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]