Visual Studio 2019 version 16.3.x でビルドした C/C++ アプリが例外 0xC000001d で異常終了する

Last Update: feedback 共有

こんにちは、Japan Developer Support Core チームの松井です。
今回は Visual Studio 2019 version 16.3.x でビルドした C/C++ アプリケーションが特定の環境で 0xC000001d により異常終了する事象についてご案内します。

なお、この記事は Developer Community で報告されている問題についてご案内しております。対応の経緯などの詳細内容については、参考情報の項に記載しているリンク先のドキュメントをご参照ください。

現象

Visual Studio 2019 version 16.3.x でビルドした C/C++ アプリケーションで、下記すべての条件を満たす場合に、例外コード 0xC000001d でアプリケーションが異常終了する場合があります。

  • ハードウェア
    AVX-512 命令をサポートする CPU

  • オペレーティング システム
    Windows 8.1 および Windows Server 2012 R2 以前のバージョン
    (Windows 10 および Windows Server 2016 以降では発生しません。)

  • アプリケーションの実装
    アプリケーションで浮動小数点型と整数型の間で型変換を行う処理がある

  • Visual Studio のバージョン
    Visual Studio 2019 version 16.3.x

この現象が発生した場合、アプリケーションの異常終了に伴ってソース “Application Error”、イベント ID “1000” で以下のような内容が Application のイベント ログに記録されます。

障害が発生しているアプリケーション名: ConsoleApplication1.exe、バージョン: 0.0.0.0、タイム スタンプ: 0x5fdc4598
障害が発生しているモジュール名: ConsoleApplication1.exe、バージョン: 0.0.0.0、タイム スタンプ: 0x5fdc4598
例外コード: 0xc000001d
障害オフセット: 0x000514f6
障害が発生しているプロセス ID: 0xb14
障害が発生しているアプリケーションの開始時刻: 0x01d6ea62224296c8
障害が発生しているアプリケーション パス: C:\Users\Administrator\Desktop\ConsoleApplication1.exe
障害が発生しているモジュール パス: C:\Users\Administrator\Desktop\ConsoleApplication1.exe
レポート ID: 6049bc77-5655-11eb-80b5-00155d864f04
障害が発生しているパッケージの完全な名前:
障害が発生しているパッケージに関連するアプリケーション ID:

原因

Visual C/C++ コンパイラーは、浮動小数点型と整数型の間で型変換を行うために、実行環境で利用可能な命令セットに基づいて出来る限り高速な命令の利用を試みます。
型変換に利用されている AVX-512 命令セットを利用するには Windows 10 / Windows Server 2016 以降が必要ですが、Visual Studio 2019 version 16.3.x では OS バージョンが考慮されていませんでした。そのため、ハードウェアが AVX-512 命令セットをサポートし、OS が AVX-512 命令に対応していないバージョンの場合に、利用できない命令セットの実行により例外コード 0xC000001d (STATUS_ILLEGAL_INSTRUCTION) でアプリケーションが異常終了します。

対処方法

現象の項で記載した条件に合致して影響を受けるアプリケーションについては、OS の設定等で回避する方法はありません。Visual Studio 2019 version 16.4 以降でアプリケーションをリビルドしてください。
条件に合致していない場合は、対処の必要はありません。

参考情報

この問題は Microsoft の Developer Community で報告され、Visual Studio 2019 version 16.4 のリリースで修正されました。
ただし、リリース ノートへの記載が漏れていましたので、Developer Community の報告へのリンクが 2021 年 1 月 14 日に追記されています。

VS2019 16.3 seems to incorrectly detect AVX512 on Windows 7 64 bit when it is not present
https://developercommunity.visualstudio.com/content/problem/787296/vs2019-163-seems-to-incorrectly-detect-avx512-on-w.html

更新履歴

2021/01/15: 初版