diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-02-11 02:57:39 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-02-11 02:57:39 +0000 |
commit | 9fbeba0d8e757d12f3f775dcfa89450809e1df49 (patch) | |
tree | 27dd2debd2231374e55931ee3c2cbed8a70bfc5e /clang/lib/CodeGen/CGExpr.cpp | |
parent | c9751069f5c99635fef60030041b904c0a431707 (diff) | |
download | bcm5719-llvm-9fbeba0d8e757d12f3f775dcfa89450809e1df49.tar.gz bcm5719-llvm-9fbeba0d8e757d12f3f775dcfa89450809e1df49.zip |
Basic support for referring to captured variables from lambdas. Some simple examples seem to work. Tests coming up soon.
llvm-svn: 150293
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 85b01387e83..ae4084ba6ce 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -1396,6 +1396,12 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { llvm::Value *V = LocalDeclMap[VD]; if (!V && VD->isStaticLocal()) V = CGM.getStaticLocalDeclAddress(VD); + + // Use special handling for lambdas. + if (!V) + if (FieldDecl *FD = LambdaCaptureFields.lookup(VD)) + return EmitLValueForField(CXXABIThisValue, FD, 0); + assert(V && "DeclRefExpr not entered in LocalDeclMap?"); if (VD->hasAttr<BlocksAttr>()) |