Intel® C++ Compiler
Support and discussions for creating C++ code that runs on platforms based on Intel® processors.
7693 Discussions

ICC 13.0.1 crashes while spawning a lambda

Wei_Pan
Beginner
144 Views

 

Hi

Notice that ICC 13.0.1 failed to compile a cilk spawn with a lambda capturing an array by value. Here is the small test case.

void foo(const float*);

void bar() {

  float A[2] = {0, 1};

  _Cilk_spawn [=](){ foo(A); }();

}

0 Kudos
3 Replies
Georg_Z_Intel
Employee
144 Views
Hello, that's indeed a compiler bug. It seems cilk_spawn surprisingly does not work with lambdas. I've filed a defect ticket (edit: DPD200239458) and let you know if I learn more. Best regards, Georg Zitzlsberger
Georg_Z_Intel
Employee
144 Views
Hello, after some analysis it turns out that passing an array by value caused this internal error. Passing by reference works. Let me provide you a workaround that should have less impact for you (pass pointer to array by value instead): [cpp] void foo(const float*); void bar() { float AA[2] = {0, 1}; float *A = AA; _Cilk_spawn [=](){ foo(A); }(); } [/cpp] Edit: Another one would be using named lambdas: [cpp] void foo(const float*); void bar() { float A[2] = {0, 1}; auto templ = [=](){ foo(A); }; _Cilk_spawn templ(); } [/cpp] We're still working on fixing this issue. I'll keep you in the loop. Best regards, Georg Zitzlsberger
Georg_Z_Intel
Employee
144 Views
Hello, the problem will be fixed with Intel(R) Composer XE 2013 Update 3. Best regards, Georg Zitzlsberger
Reply