メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

-show-similar-overflows

ラップ アラウンド モードでのすべてのオーバーフローの表示

構文

-show-similar-overflows

説明

-show-similar-overflows は、根本原因が同じでも、すべてのオーバーフローをラップ アラウンド モードで表示します。

オプションの [符号付き整数のオーバーフロー モード] (-signed-integer-overflows) または [符号なし整数のオーバーフロー モード] (-unsigned-integer-overflows) に対して warn-with-wrap-around を選択した場合は、オーバーフローした値がラップされます。たとえば、値 INT_MAX + 1INT_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 で導入