メインコンテンツ

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;
    }

  • pascalinlinepackedinterruptextended__X__Yvectorpixelbool などの拡張キーワード:

    通常、コンパイラ フラグ -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 キーワードの後にあるセマンティクスは完全にはサポートされません。