Skip to content
  • Douglas Gregor's avatar
    Rework the Sema/AST/IRgen dance for the lambda closure type's · 355efbb2
    Douglas Gregor authored
    conversion to function pointer. Rather than having IRgen synthesize
    the body of this function, we instead introduce a static member
    function "__invoke" with the same signature as the lambda's
    operator() in the AST. Sema then generates a body for the conversion
    to function pointer which simply returns the address of __invoke. This
    approach makes it easier to evaluate a call to the conversion function
    as a constant, makes the linkage of the __invoke function follow the
    normal rules for member functions, and may make life easier down the
    road if we ever want to constexpr'ify some of lambdas.
    
    Note that IR generation is responsible for filling in the body of
    __invoke (Sema just adds a dummy body), because the body can't
    generally be expressed in C++.
    
    Eli, please review!
    
    llvm-svn: 150783
    355efbb2
Loading