メインコンテンツ

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

コンパイラ (-compiler)

ソース コードのビルドに使用するコンパイラの指定

説明

このページでは、静的解析製品 Polyspace® Bug Finder™ および Polyspace Code Prover™ でサポートされるコンパイラをリストします。Polyspace Test™ でサポートされるコンパイラについては、Specify C/C++ Compilers for Testing in Polyspace Platform User Interface (Polyspace Test)を参照してください。

ソース コードのビルドに使用するコンパイラを指定します。

Polyspace は組み込みアプリケーションの開発に使用されている最も一般的な諸コンパイラを完全にサポートしています。次の一覧を参照してください。これらのコンパイラでは、使用するコンパイラとターゲット プロセッサを指定するだけで解析を実行できます。その他のコンパイラでは、コンパイラ名として [generic] を指定します。コンパイラ エラーが発生する場合は、コンパイラ固有の拡張を明示的に定義してエラーを回避します。

オプションの設定

以下のいずれかの方法を使用してオプションを設定します。

このオプションを使用する理由

Polyspace はこの情報を使用して、C/C++ 規格には含まれていなくても、言語拡張に含まれる構文を解釈します。

たとえば、このオプションを使用すると、sfrsbitbit などの追加の言語キーワードを使用できます。コンパイラを指定しない場合、これらの追加のキーワードが Polyspace 解析中にコンパイル エラーの原因になる可能性があります。

実際には、Polyspace はコンパイルを行うためにコンパイラを呼び出しません。特に以下に注意してください。

  • Polyspace 解析では、コンパイラ フラグを直接指定できません。コンパイラ フラグをエミュレートするには、ビルド コマンドをトレースするか同等の Polyspace 解析オプションを手動で指定します。ターゲット環境とコンパイラの動作の指定を参照してください。

  • Code Prover は、通常のコンパイラよりもリンク ポリシーが厳格です。たとえば、コンパイラで特定のコンパイラ オプションを使用して宣言の不一致を許可している場合、Code Prover でこのリンク ポリシーをエミュレートすることはできません。コンパイルおよびリンクのエラーのトラブルシューティング (Polyspace Code Prover)を参照してください。

設定

既定値: generic

Polyspace は、GCC、Clang、および Visual Studio® コンパイラをネイティブにサポートしています。これらのコンパイラでは、使用可能な任意のターゲット プロセッサを選択できます。サポートされている他の専用コンパイラについては、Polyspace では特定のターゲット プロセッサをサポートしています。ターゲット プロセッサ タイプ (-target) を参照してください。

GCC コンパイラ

gnu3.4

GCC 3.4 構文の解析が可能です。

gnu4.6

GCC 4.6 構文の解析が可能です。

gnu4.7

GCC 4.7 構文の解析が可能です。

サポートされていない GCC 拡張については、制限を参照してください。

gnu4.8

GCC 4.8 構文の解析が可能です。

サポートされていない GCC 拡張については、制限を参照してください。

gnu4.9

GCC 4.9 構文の解析が可能です。

サポートされていない GCC 拡張については、制限を参照してください。

gnu5.x

GCC 5.x 構文の解析が可能です。使用可能な GCC 5.x リリースのリストについては、GCC リリースを参照してください。

[gnu5.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu6.x

GCC 6.x 構文の解析が可能です。使用可能な GCC 6.x リリースのリストについては、GCC リリースを参照してください。

[gnu6.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu7.x

GCC 7.x 構文の解析が可能です。使用可能な GCC 7.x リリースのリストについては、GCC リリースを参照してください。

[gnu7.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu8.x

GCC 8.x 構文の解析が可能です。使用可能な GCC 8.x リリースのリストについては、GCC リリースを参照してください。

[gnu8.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu9.x

GCC 9.x 構文の解析が可能です。使用可能な GCC 9.x リリースのリストについては、GCC リリースを参照してください。

[gnu9.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu10.x

GCC 10.x 構文の解析が可能です。使用可能な GCC 10.x リリースのリストについては、GCC リリースを参照してください。

[gnu10.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu11.x

GCC 11.x 構文の解析が可能です。使用可能な GCC 11.x リリースのリストについては、GCC リリースを参照してください。

[gnu11.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu12.x

GCC 12.x 構文の解析が可能です。使用可能な GCC 12.x リリースのリストについては、GCC リリースを参照してください。

[gnu12.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

gnu13.x

GCC 13.x 構文の解析が可能です。使用可能な GCC 13.x リリースのリストについては、GCC リリースを参照してください。

[gnu13.x] を選択する場合、オプション [ターゲット プロセッサ タイプ] (-target) を使用して、GCC ベースのコンパイラ ターゲットのサブセットのみを指定できます。このサブセットに含まれていない他のターゲットを指定するには、オプション [汎用ターゲット オプション] を使用します。

サポートされていない GCC 拡張については、制限を参照してください。

Clang コンパイラ

clang3.x

解析では、以下のバージョンの Clang 構文を使用できます。

  • 3.5.0、3.5.1、および 3.5.2

  • 3.6.0、3.6.1、および 3.6.2

  • 3.7.0 と 3.7.1

  • 3.8.0 と 3.8.1

  • 3.9.0 と 3.9.1

clang4.x

Clang 4.0.0 および 4.0.1 構文の解析が可能です。

clang5.x

Clang 5.0.0、5.0.1、および 5.0.2 構文の解析が可能です。

clang6.x

Clang 6.0.0 および 6.0.1 構文の解析が可能です。

clang7.x

Clang 7.0.0、7.0.1、および 7.1.0 構文の解析が可能です。

clang8.x

Clang 8.0.0 および 8.0.1 構文の解析が可能です。

clang9.x

Clang 9.0.0 および 9.0.1 構文の解析が可能です。

clang10.x

Clang 10.0.0 および 10.0.1 構文の解析が可能です。

clang11.x

Clang 11.0.0、11.0.1、および 11.1.0 構文の解析が可能です。

clang12.x

Clang 12.0.0 および 12.0.1 構文の解析が可能です。

clang13.x

Clang 13.0.0 および 13.0.1 構文の解析が可能です。

clang14.x

Clang 14 構文の解析が可能です。

clang15.x

Clang 15 構文の解析が可能です。

clang16.x

Clang 16 構文の解析が可能です。

Visual Studio コンパイラ

visual9.0

Microsoft® Visual C++® 2008 構文の解析が可能です。

visual10.0

Microsoft Visual C++ 2010 構文の解析が可能です。

visual11.0

Microsoft Visual C++ 2012 構文の解析が可能です。

visual12.0

Microsoft Visual C++ 2013 構文の解析が可能です。

visual14.0

Microsoft Visual C++ 2015 構文の解析が可能です (Microsoft Visual Studio Update 2 をサポートしています)。

visual15.x

Microsoft Visual C++ 2017 構文の解析が可能です。使用可能な Microsoft Visual Studio 2017 バージョンのリストについては、Visual Studio 2017 リリース ノート履歴を参照してください。

visual16.x

Microsoft Visual C++ 2019 構文の解析が可能です。使用可能な Microsoft Visual Studio 2019 バージョンのリストについては、Visual Studio 2019 リリース ノート履歴を参照してください。

visual17.x

Microsoft Visual C++ 2022 構文の解析が可能です。使用可能な Microsoft Visual Studio 2022 バージョンのリストについては、Visual Studio 2022 リリース ノート履歴を参照してください。

その他のコンパイラ

armcc

ARM® v5 コンパイラに関連する非 ANSI® C 構文およびセマンティクスの解析が可能です。

[armcc] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、ARM v5 コンパイラで許容されるターゲットのみが表示されます。

ARM v5 コンパイラ (-compiler armcc) を参照してください。

armclang

ARM v6 コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[armclang] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、ARM v6 コンパイラで許容されるターゲットのみが表示されます。

ARM v6 コンパイラ (-compiler armclang) を参照してください。

codewarrior

NXP CodeWarrior® コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[codewarrior] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、NXP CodeWarrior コンパイラで許容されるターゲットのみが表示されます。

NXP CodeWarrior コンパイラ (-compiler codewarrior) を参照してください。

cosmic

Cosmic コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[cosmic] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Cosmic コンパイラで許容されるターゲットのみが表示されます。

Cosmic コンパイラ (-compiler cosmic) を参照してください。

diab

Wind River® Diab コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[diab] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Wind River Diab コンパイラで許容されるターゲットのみが表示されます。

メモ

Diab コンパイラの version 7.x を使用する場合は、-compilerclang15.x を指定します。

Diab コンパイラ (-compiler diab) を参照してください。

generic

標準の構文のみが解析されます。

言語規格は、次のオプションの選択によって決まります。

規格を明示的に指定しない場合、規格は選択したコンパイラに依存します。

greenhills

Green Hills® コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[greenhills] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Green Hills コンパイラで許容されるターゲットのみが表示されます。

Green Hills コンパイラ (-compiler greenhills) を参照してください。

iar

IAR Systems (www.iar.com) のコンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

iar-ew

IAR Embedded Workbench コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[iar-ew] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、IAR Embedded Workbench コンパイラで許容されるターゲットのみが表示されます。

IAR Embedded Workbench コンパイラ (-compiler iar-ew) を参照してください。

intel

Intel® C++ Compiler Classic (icc/icl) コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[intel] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Intel C++ Compiler Classic (icc/icl) コンパイラで許容されるターゲットのみが表示されます。

Intel C++ Compiler Classic (icc/icl) (-compiler intel) を参照してください。

keil

ARM (www.keil.com) の Keil™ 製品に関連する 非 ANSI C 構文およびセマンティクスの解析が可能です。

microchip

MPLAB XC8 C コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[microchip] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、MPLAB XC8 C コンパイラで許容されるターゲットのみが表示されます。

MPLAB XC8 C コンパイラ (-compiler microchip) を参照してください。

renesas

Renesas® コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[renesas] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Renesas コンパイラで許容されるターゲットのみが表示されます。

Renesas コンパイラ (-compiler renesas) を参照してください。

tasking

TASKING コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[tasking] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、TASKING コンパイラで許容されるターゲットのみが表示されます。

TASKING コンパイラ (-compiler tasking) を参照してください。

ti

Texas Instruments® コンパイラに関連する非 ANSI C 構文およびセマンティクスの解析が可能です。

[ti] を選択すると、Polyspace デスクトップ製品のユーザー インターフェイスのオプション [ターゲット プロセッサ タイプ] (-target) では、Texas Instruments コンパイラで許容されるターゲットのみが表示されます。

Texas Instruments コンパイラ (-compiler ti) を参照してください。

ヒント

  • コンパイラの仕様によって、多くのコンパイラ固有のマクロの値が決定されます。Polyspace で特定のマクロがどのように定義されるかを確認するには、オプション -dump-preprocessing-info を使用します。

  • Visual Studio コンパイラを使用する場合、long long が 64 ビットに設定されている [ターゲット プロセッサ タイプ] (-target) オプションを使用しなければなりません。互換ターゲットには、long long が 64 に設定されている (コマンド ラインでは -long-long-is-64bits) [i386][sparc][m68k][powerpc][tms320c3x][sharc21x61][mpc5xx][x86_64][mcpu] が含まれます。

  • オプション [JSF AV C++ ルールのチェック] (-jsf-coding-rules) を使用する場合、コンパイラ generic を選択します。別のコンパイラを使用すると、Polyspace では、ISO 規格への準拠を必要とする JSF® コーディング ルールをチェックできません。たとえば、次の AV ルール 8 です。"すべてのコードは ISO/IEC 14882:2002(E) 標準 C++ に準拠する"

  • Polyspace は、weak シンボルを定義するため、以下のキーワード、プラグマ、属性をサポートしています。

    • キーワード

      __weak

      __weak__

    • プラグマ

      #pragma weak symbol

      #pragma WEAK symbol

      #pragma WEAK(symbol)

      #pragma weak "symbol

      #pragma weak symbol=default

    • GNU 属性

      __attribute__((weak))

      __attribute__ ((weak, alias("default")))

  • "デバイス ベンダー" (Simulink)Texas Instruments として指定する Simulink® モデルから生成されたコードを解析する際、Polyspace は -compiler オプションを [generic] に設定します。

制限

GNU コンパイラ

Polyspace では GNU コンパイラの特定の機能がサポートされません。

  • GNU® コンパイラ version 4.7 以降:

    • 入れ子関数。

      たとえば、以下では関数 bar は関数 foo に入れ子になっています。

      int foo (int a, int b)
      {
        int bar (int c) { return c * c; }
      
        return bar (a) + bar (b);
      }

    • 1 つのオペランドで値が一様なベクトルの省略表記を使用する、ベクトル型の二項演算。

      たとえば、加算演算 2+a では、{2,2,2,2} の省略表記として 2 を使用しています。

      typedef int v4si __attribute__ ((vector_size (16)));
      v4si res, a = {1,2,3,4};
      
      res = 2 + a;  /* means {2,2,2,2} + a  */

    • 関数パラメーターの事前宣言。

      たとえば、以下ではパラメーター len が事前宣言されています。

      void func (int len; char data[len][len], int len)
      {
        /* … */
      }

    • 複素整数データ型。

      ただし、複素数の浮動小数点データ型はサポートされています。

    • 初期化リストを使用したフレキシブル配列メンバーをもつ構造体の初期化。

      たとえば、構造体 S はフレキシブル配列メンバー tab をもちます。S 型の変数は初期化リストで直接初期化されます。

      struct S {
          int x;
          int tab[];            /* flexible array member - not supported */
      };
      struct S s = { 0, 1, 2} ;
      たとえば、s.tab[1] をデリファレンスすると、解析中に警告が表示され、結果にレッド チェックが表示されます。

    • 128 ビット変数。

      Polyspace ではこのデータ型を意味的に解析できません。Bug Finder では 128 ビット データ型を使用できますが、Code Prover でそのようなデータ型 (たとえば、GCC 拡張の __float128) を使用した場合、コンパイル エラーが表示されます。

  • GNU コンパイラ Version 7.x:

    • 型名 _FloatN および _FloatNx は意味的にサポートされていません。解析では、これらを floatdouble、または long double 型として扱います。

    • 1.2f1232.3F64x など、接尾辞 fNFN、または fNx を使用する _FloatN または _FloatNx 型の定数はサポートされていません。

Visual Studio コンパイラ

Polyspace では Visual Studio コンパイラの特定の機能がサポートされません。

  • C++ Accelerated Massive Parallelism (AMP)。

    C++ AMP は、Visual Studio の機能で、特定のターゲットの特定の種類のデータ並列ハードウェアに対して C++ コードの実行速度を上げます。通常、restrict キーワードを使用してこの機能を有効にします。

    void Buffer() restrict(amp) 
    {
      ... 
    }

  • __assume ステートメント。

    通常、__assume は false である条件と一緒に使用します。このステートメントは、オプティマイザーがそれ以降の条件を true と仮定しなければならないことを示します。Code Prover では、この矛盾を解決できません。次のエラーが表示されます。

    Asked for compulsory presence of absent entity : assert

  • C++ 用マネージ拡張 (.NET Framework に必要)、またはその後継となる C++/CLI (共通言語基盤用に変更された C++)

  • __declspec キーワードと属性 (noreturnnothrowselectany、および thread 以外)。

その他のコンパイラ

  • Polyspace は、TASKING コンパイラや Cosmic コンパイラに固有の一部の構成要素をサポートしていません。

    たとえば、以下の構成要素は一切サポートされていません。これらを使用すると、エラーが発生します。

    • 半精度の浮動小数点データ型 (_Float16 など)

    • 非整数の固定小数点データ型 (__sfract__fract__accum__laccum など)

  • Polyspace は、Embarcadero C++ コンパイラをサポートしていません。

Polyspace システム ヘッダー

コンパイラ ヘッダーへのパスを指定しないと、コンパイラでコードがコンパイルされる場合でも、Polyspace では専用のステム ヘッダーが使用され、プロジェクトがコンパイルされない可能性があります。

Polyspace がコンパイラのヘッダー ファイルを使用するようにするには、polyspace-configure を実行するか、またはコンパイラ ヘッダー ファイルへのパスを手動で指定してください。Polyspace 解析への標準ライブラリ ヘッダーの指定を参照してください。

コマンド ライン情報

パラメーターと値

パラメーター: -compiler
値 (GCC): gnu3.4 | gnu4.6 | gnu4.7 | gnu4.8 | gnu4.9 | gnu5.x | gnu6.x | gnu7.x | gnu8.x | gnu9.x | gnu10.x | gnu11.x | gnu12.x
値 (Clang): clang3.x | clang4.x | clang5.x | clang6.x | clang7.x | clang8.x | clang9.x | clang10.x | clang11.x | clang12.x | clang13.x
値 (Visual Studio): visual9.0 | visual10.0 | visual11.0 | visual12.0 | visual14.0 | visual15.x | visual16.x | visual17.x
値 (その他): armcc | armclang | codewarrior | cosmic | diab | generic | greenhills | iar | iar-ew | intel | keil | microchip | renesas | tasking | ti
既定値: generic

例 1 (Bug Finder): polyspace-bug-finder -lang c -sources "file1.c,file2.c" -compiler gnu4.6
例 2 (Bug Finder): polyspace-bug-finder -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
例 1 (Code Prover): polyspace-code-prover -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
例 2 (Code Prover): polyspace-code-prover -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
例 1 (Bug Finder Server): polyspace-bug-finder-server -lang c -sources "file1.c,file2.c" -compiler gnu4.6
例 2 (Bug Finder Server): polyspace-bug-finder-server -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
例 1 (Code Prover Server): polyspace-code-prover-server -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
例 2 (Code Prover Server): polyspace-code-prover-server -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0