インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このセクションでは、例外とランタイムエラーの場所を特定するためのいくつかのガイドラインを示します。インテル® Fortran のランタイム・エラー・メッセージは、通常、エラーを引き起こしているソース内の正確な位置を示しません。エラーと例外の処理に関するコンパイラー・オプションは次のとおりです。
-check [keyword] オプション (Linux* および macOS*) または /check[:keyword] オプション (Windows*) は、ランタイム時に特定の状態をキャッチするように追加のコードを生成します。
キーワード bounds は、配列の添字および部分文字列を処理する式に対して、コンパイル時およびランタイム時のチェックを実行するコードを生成します。配列添字が配列に設定された次元境界を超えていたり、文字長を超えている場合、エラーが報告されます。
キーワード uninit、初期化されていない変数の動的チェックを行うコードを生成します。変数が書き込まれる前に読み取られる場合、ランタイム・エラー・ルーチンが呼び出されます。
キーワード noformat および nooutput_conversion は、ランタイムエラーの重要度を下げ、プログラムの実行を続けます。
キーワード pointersは、関連付けが解除されたポインターと割付けできない配列を確認するコードを生成します。次の check[:]pointers オプションの例は、さまざまなメッセージを出力します。
割り当てられていない割付け変数の例
real, allocatable:: a(:)
!
! A は割り当てられていません。次のように割り当てます。
!
! allocate(a(4))
!
! A は割り当てられていないため、"check pointers" でビルドされた
! アプリケーションで次の文はエラーを出力します。
!
a=17
print *,a
end
Output 1:
forrtl: 重大 (408): fort: (8): 割付け変数 A から変数が
割り当てられていないときにフェッチしようとしました。
関連付けられていないポインターの例
real, pointer:: a(:)
allocate(a(5))
a=17
print *,a
deallocate(a) ! A が割り当て解除されると、"check pointers" で
! ビルドされたアプリケーションで次の文はエラーを出力します。
a=20
print *,a
end
Output 2:
17.00000 17.00000 17.00000 17.00000 17.00000
forrtl: 重大 (408): fort: (7): ポインター A をポインターがターゲットと
関連していないときに使用しようとしました。
ゼロ値の Cray* ポインターの例
pointer(p,a)
real, target:: b
!
! P にはアドレスが割り当てられていません。
! 次のようにアドレスを割り当てます。
!
! p=loc(b)
!
! P にはアドレスが割り当てられていないため、
! "check pointers" でビルドされたアプリケーションで
! 次の文はエラーを出力します。
!
b=17.
print *,a
end
Output 3:
forrtl: severe (408): fort: (9): ポイント先 A を対応する
整数ポインター P の値がゼロのときに
使用しようとしました。traceback オプションは、ランタイム時に致命的なエラーが発生したとき、ソースファイルのトレースバック情報を表示できるように、オブジェクト・ファイル内に補足情報を生成します。これにより、致命的なランタイムエラーの原因を特定する作業が簡単になります。traceback オプションを指定せずに、.MAP ファイルと、致命的なエラーが発生したときに表示されるスタックの 16 進アドレスをもとに、エラーの原因を特定できる場合もあります。「トレースバック」で説明しているように、致命的なランタイムエラーでは、一部の traceback 関連の情報が提供されます。
fpe オプションは、ランタイム時の浮動小数点算術例外 (IEEE 算術) の処理方法を制御します。fpe[:]3 オプションを指定すると、すべての浮動小数点例外が無効になり、IEEE 例外値が許容され、プログラムが続行されます。これとは対照的に、fpe[:]0 または /fpe:0 を指定すると、例外値 (NaN など) が生成されたり、浮動小数点オーバーフローやゼロ除算が発生したり、または正規化されていない数 (通常はエラーの原因を特定できる) を使用しようとした際に実行を停止します。また、アンダーフローはゼロになります。
warn オプションと nowarn オプションは、コンパイル時の警告メッセージを制御します。コンパイル時の警告メッセージは、ランタイムエラーの原因を判断するのに役立つ場合があります。
Linux* および macOS* では、-fexceptions オプションは、C++ 例外処理テーブルの生成を有効にし、言語が混在したアプリケーションの Fortran ルーチンが、C++ ルーチン間の例外処理に影響されないようにします。
Windows* では、IDE のコンパイル診断オプションは、コンパイル時の診断メッセージを制御します。状況によってはランタイムエラーの原因を判断するのに役立つことがあります。