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 内で呼ぶ関数が深い場合に起こるのかもしれない…まあとりあえず原因が分かってよかった。