オーバーフロー
算術演算が原因のオーバーフロー
説明
算術演算に関するこのチェックでは、結果がオーバーフローするかどうかを判別します。このチェックの結果は、無限大や NaN などの非有限の浮動小数点の結果を許可しているかどうかによって異なります。
チェックの結果は、指定した浮動小数点の丸めモードにも依存します。既定では、丸めモードは to-nearest です。浮動小数点の丸めモード (-float-rounding-mode) を参照してください。
非有限の浮動小数点を許可しない
既定では、非有限の浮動小数点は許可されません。演算の結果が許可された範囲から外れると、オーバーフローが発生します。チェックは次のようになります。
演算の結果が許可された範囲から外れる場合はレッド。
一部の実行パスで演算の結果が許可された範囲から外れる場合はオレンジ。
演算の結果が許可された範囲から外れない場合はグリーン。
オーバーフロー チェックの動作を微調整するには、以下のオプションを使用し、引数 [forbid]、[allow]、または [warn-with-wrap-around] を指定します。
算術演算で許可される範囲はオペランドのデータ型で決まります。演算にオペランドが 2 つある場合、検証では ANSI® C の変換ルールを使用して共通のデータ型を判別します。この共通のデータ型により、許可される範囲が決まります。
変換ルールのいくつかの例については、暗黙的なデータ型の変換に関する Code Prover の仮定を参照してください。
非有限の浮動小数点を許可する
無限大を組み込んだ検証モードを有効にし、無限大になる演算について検証で警告するように指定している場合、チェックは次のようになります。
ソフトウェアで考慮されるすべての実行パスで演算が無限大になり、オペランド自体が無限大でない場合はレッド。
オペランド自体が無限大でないときに一部の実行パスで演算が無限大になる場合はオレンジ。
オペランド自体が無限大でなければ演算が無限大にならない場合はグリーン。
検証で無限大になる演算を禁止するように指定している場合、チェックの色は演算の結果にのみ依存します。色はオペランドには依存しません。
この検証モードを有効にするには、以下のオプションを使用します。
無限大 (-check-infinite):引数warnまたはforbidを使用。
このチェックの診断
例
チェック情報
| グループ: 数値 |
| 言語: C | C++ |
| 頭字語: OVFL |