12月3日追記
どうやら、最適化オプションを付けた場合、並列化する部分を含む関数で throw() を宣言しているとICEが起きるようだ…しかし、以下のような簡単なソースでは再現しない。
#ifdef _OPENMP #include <omp.h> #endif const int I = 10000; void para(int j[I]) throw(){ #ifdef _OPENMP #pragma omp parallel num_threads(2) #pragma omp for schedule(static) #endif for (int i = 0; i < I; ++i) j[i] = i * i; }
関数 para 内で呼ぶ関数が深い場合に起こるのかもしれない…まあとりあえず原因が分かってよかった。