よく聞かれる質問に「Polyspace® では、私が現在使用しているコンパイラはサポートされていますか?」というものがあります。他にも「Polyspace のような静的解析ツールで、なぜコンパイラを認識する必要があるのですか?」といった質問もあります。Polyspace は、コードをコンパイルしてバイナリを作成し、そのバイナリを実行してランタイムエラーを検出するといったツールではありません。ランタイムエラーの検出に、コードの実行は伴いません。

簡単に答えると「Polyspace では、ご使用のコンパイラを認識する必要はありません」となります。ユーザーはソースコードを入力して解析を開始することができます。しかし、ご使用のコンパイラを指定すると Polyspace 解析の設定がより簡単になります。

これをさらによく理解するために、Polyspace がコードを解析する方法を見てみましょう。

Polyspace でのコンパイル

Polyspace を実行すると、解析の最初のステップであるコンパイルが行われます。このステップでは、Polyspace はコードの構文を C または C++ 言語規格と照らし合わせて確認します。詳細については、「Polyspace 解析で使用される言語規格」をご覧ください。ファイルに、構文的に正しくないコードが含まれている場合、それ以上解析を進めることはできません。解析では、コンパイラと同じように構文エラーを表示し、このファイルを検討対象から除外します。

Polyspace 解析の実行。

Polyspace 解析の実行。

コンパイラは、規格では見つからない言語拡張を追加で提供します。たとえば、「GCC 拡張機能」を参照してください。Polyspace がコンパイラを認識している場合は、解析はこれらのコンパイラ特有の拡張機能を認識できます。そうでない場合、構文チェックは規格に厳密に準拠するため、Polyspace 向けにこうした拡張機能を手動で定義する必要があります。

たとえば、GCC は 128 ビットを保持できるターゲットに対して、整数スカラー型 __int128 をサポートします。既定のコンパイルオプションを使用した場合、Polyspace Bug Finder™ では、
const __int128 m = 3329589384618324948 の行でエラーが発生します。

エラー:
識別子 "__int128" は定義されていません

GCC コンパイラの新しいバージョンと 128 ビットを保持できるターゲットを指定するだけで、このエラーを回避できます。

すでにビルドコマンド (makefile) を使用してソースコードをビルドしている場合は、さらに簡単に設定できます。また、コンパイラを明示的に指定する必要もありません。Polyspace はビルドコマンドを追跡し、使用しているコンパイラを検出できます。それだけでなく、Polyspace はコンパイラオプションを検出し、構文チェックに組み込みます。たとえば、GCC オプション std=c++14 を使用すると、Polyspace はこの使用状況を検出し、GCC 拡張機能を含む C++14 標準に従ってコードをチェックします。

Polyspace で直接サポートされるコンパイラ

R2019a の時点で、Polyspace は以下のコンパイラを直接サポートしています。

  • GCC
  • Visual C++®
  • Clang
  • Keil
  • Diab™ (Wind River®)
  • NXP™ CodeWarrior®
  • Green Hills®
  • IAR Embedded Workbench
  • TASKING®
  • Texas Instruments™
  • ARM®

サポートされているコンパイラの一覧は、「Polyspace ドキュメンテーション」を参照してください。

コンパイラが直接サポートされていない場合でも、Polyspace を使用してコードを解析できます。コンパイラ間での移植が可能な形でコードが書かれていれば、コンパイラ固有の拡張機能によるエラーは減少するはずです。こうしたエラーは、Polyspace オプションで回避できます。たとえば、Polyspace 解析を目的として、(ソースコードを変更することなく) コンパイラ固有のデータ型をより認知度の高いデータ型に置き換えることができます。

まとめると、Polyspace はすべてのコンパイラをサポートしています。コンパイラの中には、他のものと比較してより明示的にサポートされているものがあります。こうしたコンパイラの場合、コンパイラ名を指定するだけで Polyspace 解析を設定できます。