Polyspace Bug Finder におけるグローバル変数
Bug Finder™ 解析を実行する際、Polyspace® ではグローバル変数の初期化について特定の仮定を行います。この仮定は、グローバル変数の宣言方法と定義方法に基づきます。たとえば、以下のコードについて考えます。
int foo(void) {
return 1/gvar;
}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 チェッカーの拡張を参照してください。