-show-similar-overflows
ラップ アラウンド モードでのすべてのオーバーフローの表示
構文
-show-similar-overflows
説明
-show-similar-overflows は、根本原因が同じでも、すべてのオーバーフローをラップ アラウンド モードで表示します。
オプションの [符号付き整数のオーバーフロー モード] (-signed-integer-overflows) または [符号なし整数のオーバーフロー モード] (-unsigned-integer-overflows) に対して warn-with-wrap-around を選択した場合は、オーバーフローした値がラップされます。たとえば、値 INT_MAX + 1 は INT_MIN の周りにラップされます。オーバーフローする値を含むパスは、オーバーフロー後にラップされた値につながり、数行後に同様のオーバーフローが発生する可能性があります。既定で、Code Prover は、根本原因が同じオーバーフローを検出し、同様のオーバーフローの最初のものだけを表示します。このオーバーフローを修正すると、後続のオーバーフローも修正されます。すべてのオーバーフローをラップ アラウンド モードで表示するには、オプション -show-similar-overflows を使用します。
ユーザー インターフェイス (Polyspace® デスクトップ製品のみ) では、[構成] ペインの [その他] フィールドにこのオプションを入力します。Otherを参照してください。
例
この例では、var の値が不明で、エッジ ケースが演算 *copy1 = var * 2 でのオーバーフローにつながる可能性があります。同じエッジ ケースが次の演算のオーバーフローにもつながります。Code Prover は、最初の演算のオレンジ [オーバーフロー] チェックのみを表示します。
int input();
void getEven(int* copy1, int* copy2) {
int var;
var = input();
*copy1 = var * 2;
*copy2 = var * 2;
}オプション -show-similar-overflows が使用されている場合は、Code Prover が両方の演算のオレンジ [オーバーフロー] チェックを表示します。
int input();
void getEven(int* copy1, int* copy2) {
int var;
var = input();
*copy1 = var * 2;
*copy2 = var * 2;
}バージョン履歴
R2020b で導入