メインコンテンツ

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

アサーションまたはメモリ割り当て関数に関連する Polyspace コンパイル警告の修正

問題

Polyspace® では、解析の効率を高めるために標準ライブラリ関数の独自の実装を使用します。標準ライブラリ関数を再定義して関数本体を Polyspace に提供した場合、その定義が解析で使用されます。

ただし、一部の標準ライブラリ関数については、関数を再定義して関数本体を提供した場合でも、Polyspace の独自の実装が引き続き使用されます。これらの関数には、関数 assert やメモリ割り当て関数 (malloccallocalloca など) が含まれます。

次のような警告メッセージが表示されます。

Body of routine "malloc" was discarded.

原因

これらの関数には Polyspace の解析において特別な意味があるため、再定義することは許可されていません。次に例を示します。

  • 関数 malloc の Polyspace 実装では、malloc を使用して割り当てられたメモリが後で解放されるかどうかを確認できます。

  • assert の Polyspace 実装は、解析を強化するために内部で使用されます。

解決法

独自の再定義を特に使用する必要がない場合は、この警告を無視します。解析結果は、標準ライブラリ関数の元の仕様に準拠した Polyspace 実装に基づきます。

独自の再定義を使用する必要がある場合は、再定義した関数が元の関数と同様に動作することを確認したうえで、関数の名前を変更します。オプション [プリプロセッサ定義] (-D) を使用して、解析のためだけに関数の名前を変更できます。たとえば、関数 malloc の名前を my_malloc に変更するには、オプションの引数に malloc=my_malloc を使用します。