diff options
| author | Faisal Vali <faisalv@yahoo.com> | 2014-05-30 04:39:37 +0000 |
|---|---|---|
| committer | Faisal Vali <faisalv@yahoo.com> | 2014-05-30 04:39:37 +0000 |
| commit | 47d9ed4e2005795cb1565a5ec1952cabf777ad62 (patch) | |
| tree | 7298bb86270fec4a159fac7a0e263f3a6e25130c /llvm/test/CodeGen/ARM/clz.ll | |
| parent | 5ab77956497f2787c9a8266632ba0e3498630bd6 (diff) | |
| download | bcm5719-llvm-47d9ed4e2005795cb1565a5ec1952cabf777ad62.tar.gz bcm5719-llvm-47d9ed4e2005795cb1565a5ec1952cabf777ad62.zip | |
Fix 'this' capturing Generic lambdas used within default initializers (PR19876)
http://llvm.org/bugs/show_bug.cgi?id=19876
The following C++1y code results in a crash:
struct X {
int m = 10;
int n = [this](auto) { return m; }(20);
};
When implicitly instantiating the generic lambda's call operator specialization body, Sema is unable to determine the current 'this' type when transforming the MemberExpr 'm' - since it looks for the nearest enclosing FunctionDeclDC - which is obviously null.
I considered two ways to fix this:
1) In InstantiateFunctionDefinition, when the context is saved after the lambda scope info is created, retain the 'this' pointer.
2) Teach getCurrentThisType() to recognize it is within a generic lambda within an NSDMI/default-initializer and return the appropriate this type.
I chose to implement #2 (though I confess I do not have a compelling reason for choosing it over #1).
Richard Smith accepted the patch:
http://reviews.llvm.org/D3935
Thank you!
llvm-svn: 209874
Diffstat (limited to 'llvm/test/CodeGen/ARM/clz.ll')
0 files changed, 0 insertions, 0 deletions

