6.6 コンパイラデータフロー警告

コンパイラは、最適化処理の一環としてデータフロー分析を実行します。この情報を使用して、コード内の潜在的な問題点を識別できます。たとえば、この情報を使用して、初期化されていない変数が使用されたときに警告を生成できます。

データフロー分析で生成される警告は、プロセッサレジスタで保持されているローカル変数に関するものだけであり、メモリで保持されているグローバル変数や、スタックで保持されている変数または構造体に対しては警告を生成しません。
次の点に注意して下さい。
  • ARM コンパイラ 5.04 以上では、デフォルトでデータフロー警告が表示されません。それらを出力するには、--diag_warning=4017 オプションを使用します。RealView Compiler Tools(RVCT)v2.0 以前では、-fa オプションが指定された場合のみ、データフロー警告が生成されました。
  • データフロー分析は、最適化レベル -O0 で無効です。これは、--diag_warning=4017 が指定された場合でも当てはまります。
例えば、以下のコードでは、警告を有効にしておいた場合、-O1 以上でコンパイルすると、警告 "C4017W:i は設定前に使用できます" が生成されます。
int f(void)
{
    int i;
    return i++;
}
分析結果は、使用する最適化レベルによって異なります。つまり、より高い最適化レベルを使用すると、低い最適化レベルでは表示されない多数の警告が表示されます。
データフロー分析では、問題があるコードを正確に識別できません。コンパイラによって生成される C4017W 警告の目的は、発生する可能性がある問題を示すことだけです。コードを正確に分析するには、Lint などのサードパーティ製分析ツールを使用します。
関連する概念
6.2 コンパイラ診断メッセージの重大度を変更するオプション
6.3 プラグマを使用したコンパイラの診断メッセージの制御
6.4 コンパイラ診断メッセージの接頭文字
6.5 コンパイラ終了ステータスコードと終了メッセージ
関連する参考文書
6.1 コンパイラ診断メッセージの重大度
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.