MIR
MIR (Medium-level Intermediate Representation) 表現はソースコードとオブジェクトコードの中間にあります。MIR の概念的な部分は以下のとおりです。
- 制御フローグラフのノード。すべてのノードは条件ノード、スイッチノード、リーフノード、式ノードのいずれかです。
- ノード間の制御フローを表す制御フローグラフの端。
- 本質的に式の抽象構文ツリー (AST) に似た式ノード。各ノードには読み取り式 (右側) と書き込み式 (左側) が含まれている場合があります。
- メモリアイテムとは、メモリの抽象的な場所を表す概念的オブジェクトです。メモリのあらゆる場所がメモリアイテムで表されるとは限りません。たとえば、メモリアイテムは配列全体だけで、個々の配列要素にはありません。メモリアイテムは、複数のノードにわたる値の追跡を可能にするオブジェクトです。どのノードにも式の一意のインスタンスがあるため、この用途に式を使うことはできません。ただし、2 つの式からメモリアイテムを抽出して、それらが同じかどうかを確認することは可能です。
- セマンティック情報は、プログラムのデータと型を説明します。この情報は、コードスタイル解析 API を使用して引き出せるセマンティック情報に比べると、やや限られています。
- 値の制約は、Klocwork エンジンが推論する整数値の制約です。Klocwork C/C++ パス API リファレンス PDF で、各メモリアイテムの値が特定の範囲内にあるかどうかを調べることができます。
MIR は関数とクラスメソッドごとに別々にビルドされます。