EN JP CN

UNREACH.RETURN

UNREACH.RETURN

到達不能な戻り値

UNREACH.RETURN チェッカーは、コードで到達不能な戻り値ステートメント、つまり、決して使用されない戻り値を探します。UNREACH.RETURN の一般的な使用法は、到達不能な戻り値を他のタイプの到達不能コードから切り離すことです。重要ではないコード (特に、生成コード) に到達不能な戻り値があることが分かっていても、一般に到達不能コードをさらに UNREACH.GEN でチェックするときは、UNREACH.RETURN チェッカーを無効に出来ると便利です。

脆弱性とリスク

到達不能な戻り値ステートメントは、コードのメンテナンスやレビュー時に混乱を引き起こすことがあります。斬新なケースでは、到達不能な戻り値が意図しないプログラム動作を引き起こす可能性もあります。

脆弱コード例

1  void foo(int *p)
2  {
3      switch (*p) {
4          case 0:
5          case 1:
6              if (*p == 0) {
7                  ++(*p);
8                  return;
9              } else if (*p == 1){
10                 --(*p);
11                 return;
12             }
13             return;
14         default:
15             (*p) = 1 - (*p);
16     }
17 }

Klocwork は到達不能な void 戻り値ステートメントレポートを生成し、13 行目での戻り値ステートメントが決して到達されないことを示します。このケースでは明らかに、動作は良性であるため、レビュー担当者はこのチェッカーを無効にするのが一般的です (特に、パターンがコードジェネレータによって体系的な方法で出力された場合)。

関連チェッカー

拡張機能

このチェッカーは機能を拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。