]> granicus.if.org Git - clang/commit
Implement "optimization" for lambda-to-block conversion which inlines the generated...
authorEli Friedman <eli.friedman@gmail.com>
Thu, 1 Mar 2012 04:01:32 +0000 (04:01 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 1 Mar 2012 04:01:32 +0000 (04:01 +0000)
commit23f0267e2d56c0407f12e62df3561ecf75d74e6e
treef6e536907913aaa1fa958f250092fefd74cb7d4c
parent5e4e58b805e0e03a669aa517d1d20d4735a3192e
Implement "optimization" for lambda-to-block conversion which inlines the generated block literal for lambdas which are immediately converted to block pointer type.  This simplifies the AST, avoids an unnecessary copy of the lambda and makes it much easier to avoid copying the result onto the heap.

Note that this transformation has a substantial semantic effect outside of ARC: it gives the converted lambda lifetime semantics similar to a block literal.  With ARC, the effect is much less obvious because the lifetime of blocks is already managed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151797 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Decl.h
include/clang/Sema/Sema.h
lib/CodeGen/CGBlocks.cpp
lib/CodeGen/CGClass.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/CodeGen/CodeGenFunction.h
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExprCXX.cpp
lib/Sema/SemaLambda.cpp
test/CodeGenObjCXX/lambda-expressions.mm