Lambda Bug

Lambda Bug

I seem to have encountered a fairly serious bug in the C++11 Lambda implementation. This can be reproduced with XE Composer 12.1 Update 10. The following code will crash:#include #include class A{public: A():name("Class A"){} void F1(std::function callback) { auto f = [this,callback](void) { F2(callback); }; f(); }private: void F2(std::function callback) { printf("%s\\n",name); callback(); } const char * name;};int main(void){ A a; a.F1([](void) { printf("Called.\\n"); });}This issue is that when A::F2 is invoked the lambda-captured 'this' pointer is garbage. The bug seems to be related to capturing a std::function instance bound to a lambda alongside the 'this' pointer. If the std::function callback parameter is not captured then the code behaves correctly. A workaround is to define F1 such that the 'this' pointer is assigned to a local variable that is then captured: //Works correctly void F1(std::function callback) { A * thisptr=this; auto fn2 = [thisptr,callback](void) { thisptr->F2(callback); }; fn2(); }The original code works correctly when compiled with the Microsoft compiler (v10).Thanks,Scott

6 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

This sounds like the same bug as described here:

Sounds like it. In my code the value of 'this' was also0xcdcdcdcd. Looks similar to this too:

Is there any update on this issue? Is it a confirmed bug in Update 10? Is it fixed in Composer 13?

Although it's not fixed yet in 13.0, but it's been actively investigated. When the fix is in the product, our report should show and we will let you know.



this problem has been fixed for the next update release, Intel Composer XE 2011 Update 12 and also will be fixed for the future Intel Composer XE 2013.

Best regards,

Georg Zitzlsberger

Leave a Comment

Please sign in to add a comment. Not a member? Join today