メインコンテンツ

Polyspace Bug Finder におけるグローバル変数

Bug Finder™ 解析を実行する際、Polyspace® ではグローバル変数の初期化について特定の仮定を行います。この仮定は、グローバル変数の宣言方法と定義方法に基づきます。たとえば、以下のコードについて考えます。

int foo(void) {
    return 1/gvar;
}
Bug Finder は以下の場合に変数 gvar における [ゼロ除算] の欠陥を検出します。

  • ソース コードで int gvar; を定義しており、foo を呼び出す main 関数がある。Bug Finder は、変数を 0 に初期化することを定める ANSI 規格に従う。

  • ソース コードで int gvar; を定義するか、extern int gvar; を宣言する。別の関数が foo を呼び出し、gvar=0 を設定する。それ以外の場合、ソース ファイルが不完全で main 関数を含まなければ、Bug Finder は gvar の初期化について仮定を行わない。

  • const int gvar; を宣言する。Bug Finder は const キーワードによって、gvar が 0 に初期化されると仮定する。

ランタイムは長くなりますが、欠陥を表示するときに foo によるグローバル変数の各読み取りまたはその呼び出し先の各読み取りに対してすべての値が考慮されるより徹底的な解析を実行できます。特定のシステム入力値から欠陥を見つけるための Bug Finder チェッカーの拡張を参照してください。

参考

|