ローカルプログラムの解析

スタティックの検証では、コンパイラーは各プログラムユニットを個別に解析し、ユーザープログラムのあらゆる種類のエラー、警告、または問題点をチェックします。次に例を示します。

以下は、ローカルプログラム解析の例です。

例 1: 誤った使用

utility.c ファイルには、次の行が含まれています。

181     union doub {

182        char i[8];

183        BITBOARD d;

184      };

185     union doub x;

                 ...

194     x.d=board;                 ...

199     if(x.i[subs[i]] & j)

スタティックの検証機能で次のメッセージが発行されます。

utility.c(199): warning #12180: "x.i" was set as "long unsigned" but used as "char".See (file:utility.c line:194)

例 2: インデックスの誤り

utility.c ファイルには、次の行が含まれています。

911    int ReadParse(char *buffer, char *args[], char *delims) {

            ...

920     for (nargs=1;nargs<32;nargs++) {

921        next=strtok(0,delims);

922        if (!next) break;

923        strcpy(args[nargs],next);

924     }

init.c ファイルには、次の行が含まれています。

526     static char *args[16]={a1,a2,a3,a4,a5,a5,a5,a5,a5,a5,a5,a5,a5,a5,a5,a5};

              ...

529     nargs=ReadParse(initial_position,args," ;");

スタティックの検証機能で次のメッセージが発行されます。

utility.c(923): warning #12255: possibly index is out of bounds for actual "args".See (file:init.c line:529)

例 3: オブジェクトが必要な長さに満たない

"chess.h" ファイルには、次の行が含まれています。

278    typedef struct {

279        int path[MAXPLY];

280        unsigned char path_hashed;

281        unsigned char path_length;

282        unsigned char path_iteration_depth;

283    } CHESS_PATH;

initdata.h ファイルには、次の行が含まれています。

237      CHESS_PATH     pv[MAXPLY];

quiesce.c ファイルには、次の行が含まれています。

153      memcpy(&pv[ply-1].path_hashed,&pv[ply].path_hashed,3);

スタティックの検証機能で次のメッセージが発行されます。

quiesce.c(153): error #12224: object "pv.path_hashed" is smaller than required length

例 4: 組み込み関数の引数の型の誤り

makefile ファイルには次の行が含まれています。

31    CFLAGS2 = $(CFLAGS) -DVERSION=9 -DCOMPDATE=1994

"version.c" ファイル:

20 fprintf (stderr, "%s: version: %d, compiled: %s, cflags: %s\n",

21 ego, VERSION, COMPDATE, "CFLAGS");

スタティックの検証機能で次のメッセージが発行されます。

version.c(21): error #12037: argument should be pointer to "char"