Diab コンパイラに関連する Polyspace コンパイル エラーの修正
オプション [コンパイラ] (-compiler) に diab を選択すると、この問題が発生する可能性があります。
問題
Polyspace® 解析中、Diab コンパイラ固有のキーワードに関連するエラーが表示されます。たとえば、restrict キーワードに関連するエラーが表示されます。
原因
通常コンパイラ フラグを使用してキーワードを有効にします。Polyspace 解析は、既定ではこれらのキーワードを有効にしません。Polyspace にコンパイラ フラグを認識させなければなりません。
Polyspace 解析では、コンパイル エラーを防ぐため、既定ではこれらのキーワードは有効にしません。ユーザーによっては、キーワードを有効にしないで、代わりに通常の識別子としてキーワード名を使うこともあります。Polyspace が識別子をキーワードとして扱う場合、コンパイル エラーが発生します。
解決法
コマンド ライン オプション -compiler-parameter を Polyspace 解析で次のように使用します。コマンド ライン オプションを使用して、Polyspace にコンパイラ フラグを認識させます。Polyspace デスクトップ製品のユーザー インターフェイスで、フィールド Other にコマンド ライン オプションを入力できます。オプションは複数回入力できます。
-compiler-parameter の引数はエラーの原因となるキーワードによって異なります。キーワードを有効にしたら、通常の識別子としてキーワード名を使用しないようにします。たとえば、キーワード pixel を有効にしたら、変数名として pixel を使用しないようにします。ステートメント int pixel = 1 はコンパイル エラーの原因となります。
restrictキーワード:通常、コンパイラ フラグ
-Xlibc-newまたは-Xc-newを使用します。Polyspace 解析には、以下を使用します。-compiler-parameter -Xc-new
次のコードは、コンパイラ フラグを指定しなければ、Polyspace でコンパイルされません。
int sscanf(const char *restrict, const char *restrict, ...);
vector型修飾子などの PowerPC AltiVec ベクトル拡張:通常、コンパイラ フラグ
-tPPCALLAV:を使用します。Polyspace 解析には、以下を使用します。-compiler-parameter -tPPCALLAV:
次のコードは、コンパイラ フラグを指定しなければ、Polyspace でコンパイルされません。
vector unsigned char vbyte; vector bool vbool; vector pixel vpx; int main(int argc, char** argv) { return 0; }pascal、inline、packed、interrupt、extended、__X、__Y、vector、pixel、boolなどの拡張キーワード:通常、コンパイラ フラグ
-Xkeywords=を使用します。Polyspace 解析には、以下を使用します。-compiler-parameter -Xkeywords=0xFFFFFFFF
次のコードは、上記のオプションを指定しなければ、Polyspace でコンパイルされません。
packed(4) struct s2_t { char b; int i; } s2; packed(4,2) struct s3_t { char b; } s3; int pascal foo = 4; int main(int argc, char** argv) { foo++; return 0; }Polyspace オプションでは、コードのコンパイルのみが許可されることに注意してください。解析では、
packedキーワードの後にあるセマンティクスは完全にはサポートされません。