質問者
[VS2012→VS2019]C++でのOpneMPでC1001コンパイラ内部エラー

質問
-
VS2012で問題なかった以下のC++コードがVS2019でビルドエラー(C1001)になってしまいます。
VS2019のバージョンは16.6.3です
****************************************
int main()
{
#pragma omp parallel for
for (int y = 0; y < 5; y++)
{
try
{
...
}
catch (std::exception e)
{
...
}
}
}****************************************
[状況]
・「#pragma omp parallel for」をコメントアウトするとエラーは消えます。
・「catch (std::exception e)」を「catch (...)」に変更するとエラーは消えます。
上記より、OpenMPの処理とcatch句の"std::exception e"の組み合わせでエラーが
発生していると考えます。
ちなみに、既存のプログラムであるため、並列処理は必要です。
また、catch内でエラー内容を出力しているため、「...」にはできません。
catch句の記載方法をいろいろ変更して試したのですが、「...」にする以外には
ビルドエラーが消えません。。。
その他プロパティをいろいろ変更したりしたのですが、OpenMPを有効に
している限りビルドエラーは消えませんでした。
原因、解決方法のご教授をお願いします。
すべての返信
-
エラーが発生している状況について追加報告させていただきます。
以下のようなコードでもエラーが発生します。
並列処理外であっても、同一メソッド内に「catch (...)」以外のcatch句があるとエラーが発生します。
また、共通言語ランタイムサポートを未使用にするとビルドが成功しました。
****************************************
int main()
{
#pragma omp parallel for
for (int y = 0; y < 5; y++)
{
…
}
try
{
...
}
catch (std::exception e)
{
...
}
catch (...)
{
…
}
}
****************************************
- 編集済み onononnon 2020年7月6日 1:55
-
onononnonさん、こんにちは。フォーラムオペレーターのHarukaです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
OpenMPは、複数の独立した操作を同時に実行できる多数のスレッドを生成するように設計されています。
OpenMP仕様では、スレッドが並列領域の終わりを経由するパス以外の終了コードパスを持つことを禁止しています。
returnステートメントを使用するか、また並列領域外のラベルに移動するか。
もしそうなら、この問題を解決するために「return」行を削除してみることをお勧めします。
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~ -
onononnonさん、こんにちは。フォーラムオペレーターのHarukaです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
https://developercommunity.visualstudio.com/content/problem/729125/internal-compiler-error-when-using-openmp-and-tryc.htmlによると、これは一つのissueのようです。
より良いサポートのため、 [Developer Community]にご投稿することをお勧めします。
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~