AUTOSAR C++14 Rule A4-7-1
説明
ルール定義
An integer expression shall not lead to data loss.
根拠
明示的なキャストを行う場合や、整数式が暗黙的な変換、オーバーフロー、アンダーフロー、またはラップアラウンドの原因になる場合、データ損失が発生する可能性があります。次に例を示します。
uint16_tからuint8_tへの暗黙的な変換では、より大きいデータ型の上位バイトが破棄されます。オーバーフローを引き起こす符号付き整数の演算式は、未定義の動作です。
予期しないデータ損失が発生しないようにするには、次のようにします。
整数型の変換を回避するために、すべての演算を同じ型で行います。
他に考えられるデータ損失の原因に対処するのに適切なガード (アサート、if ステートメントなど) を使用します。
Polyspace 実装
Polyspace® は、データ損失の原因となる可能性のある以下の整数式にフラグを設定します。
オーバーフローを引き起こす、符号付きまたは符号なし整数変数に対する演算。
コンパイル時定数の値を格納できないデータ型を持つ符号付きまたは符号なし整数へのコンパイル時定数の代入。
符号付き (符号なし) 整数から、より範囲が狭い符号付き (符号なし) 整数型への変換。
符号なし整数から符号付き整数への変換。
結果のデータ型では表せない値を生成するシフト演算。
Polyspace は、より範囲が狭い型にキャストするための
static_castの使用にはフラグを設定しません。これらの変換によってデータ損失が発生する可能性があるとしても、このソフトウェアはそれを意図的なものであると見なします。
チェッカーの拡張
入力値が不明であり、入力のサブセットのみがエラーの原因として考えられる場合、既定の Bug Finder 解析ではこのルールに対する違反が報告されない場合があります。特定のシステム入力値を原因とする違反の有無をチェックするには、より厳密な Bug Finder 解析を実行してください。特定のシステム入力値から欠陥を見つけるための Bug Finder チェッカーの拡張を参照してください。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 標準変換 |
| カテゴリ: Required、Automated |
ヒント
Polyspace Bug Finder™ は、入力の値について特定の仮定を行います。Bug Finder 解析の前提条件を参照してください。
ランタイムは長くなりますが、欠陥を表示するときに、呼び出されていない関数の入力を含む関数入力のすべての値が考慮される、より徹底的な解析を実行できます。[システムのすべての入力値を考慮する、さらに厳密なチェックを実行 (-checks-using-system-input-values)] を参照してください。
バージョン履歴
R2021b で導入