ICC 13.0.1 crashes while spawning a lambda

ICC 13.0.1 crashes while spawning a lambda

Wei Pan的头像

 

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); }();

}

4 帖子 / 0 new
最新文章
如需更全面地了解编译器优化,请参阅优化注意事项
Georg Zitzlsberger (Intel)的头像

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 Zitzlsberger (Intel)的头像

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):


void foo(const float*);

void bar() {

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

  float *A = AA;

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

}

Edit: Another one would be using named lambdas:


void foo(const float*);

void bar() {

  float A[2] = {0, 1};
  auto templ = [=](){ foo(A); };

  _Cilk_spawn templ();

}

We're still working on fixing this issue. I'll keep you in the loop.

Best regards,

Georg Zitzlsberger

Georg Zitzlsberger (Intel)的头像

Hello,

the problem will be fixed with Intel(R) Composer XE 2013 Update 3.

Best regards,

Georg Zitzlsberger

登陆并发表评论。