メインコンテンツ

到達不能な関数チェックのレビューと修正

このトピックでは、Polyspace® Code Prover™[到達不能の関数] チェックの結果を体系的にレビューする方法を説明します。

[到達不能の関数] チェックの修正を判断するまでこれらの手順の 1 つ以上に従います。このチェックを修正する方法は複数あります。チェックおよびコードの例については、到達不能の関数を参照してください。

チェックが防御的コードを表していると判断する場合、結果またはコードにコメントおよび正当化情報を追加し、コードを変更しなかった理由を説明しますPolyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処またはPolyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access)を参照してください。

メモ

このチェックは既定ではオンに設定されません。このチェックをオンにするには、適切な解析オプションを指定しなければなりません。詳細については、呼び出されない関数の検出 (-uncalled-function-checks)を参照してください。

手順 1: チェック情報の解釈

[結果のリスト] ペインで、チェックを選択します。[ソース] ペインでは、関数定義をグレーで表示できます。

手順 2: チェックの根本原因の判定

関数が呼び出される場所を判定し、すべての呼び出し側が到達不能である理由を確認します。以下の手順は、Polyspace ユーザー インターフェイスでのみ実行できます。

  1. [結果のリスト] ペインで、チェックを選択します。

  2. [結果の詳細] ペインで、 ボタンをクリックします。

    [呼び出し階層] ペインでは、 で表される関数の呼び出し元が表示されます。

  3. [呼び出し階層] ペインで各呼び出し元を選択します。

    このアクションにより [ソース] ペインの関数呼び出しに移動します。

  4. 呼び出し元自体が到達不能コードから呼び出されているのかどうかを確認します。呼び出し元の定義が [ソース] ペイン上で全体的にグレーである場合、到達不能コードから呼び出されています。呼び出し元について、手順 1 から開始して、同じ調査プロセスに従います。

  5. それ以外の場合は、関数の呼び出し元であるコードのセクションが到達不能である理由を調べます。

    コードは、レッド チェックの後にある、あるいはグレーの [到達不能コード] チェックを含んでいるため到達不能である可能性があります。

    • レッド チェックが発生する場合、コードを修正してチェックを取り除きます。

    • グレーの [到達不能コード] チェックが発生する場合、チェックをレビューし、コードを修正しなければならないかどうかを特定します。到達不能コード チェックのレビューと修正を参照してください。

メモ

[呼び出し階層] ペインに呼び出し元名が表示されない場合、関数をたとえば、関数ポインターを介して間接的に呼び出しているかどうかを判定します。関数ポインター宣言と関数呼び出しの間でポインターを介して不一致が発生しているかどうかを判定します。

Polyspace は、不一致が発生すると [正確性の条件] レッド チェックまたはオレンジ チェックを間接呼び出しに付けます。間接的な関数呼び出しでの不一致を検出するには、[結果のリスト] ペインで、[正確性の条件] チェックを検索します。詳細については、正確性の条件を参照してください。