Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Wei_Pan
Beginner
76 Views

ICC 13.0.1 crashes while spawning a lambda

 

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
76 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
76 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
76 Views

Hello, the problem will be fixed with Intel(R) Composer XE 2013 Update 3. Best regards, Georg Zitzlsberger
Reply