Skip to content
Snippets Groups Projects
  • Douglas Gregor's avatar
    27dd7d96
    Rework the Sema/AST/IRgen dance for the lambda closure type's · 27dd7d96
    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!
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150783 91177308-0d34-0410-b5e6-96231b3b80d8
    27dd7d96
    History
    Rework the Sema/AST/IRgen dance for the lambda closure type's
    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!
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150783 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.