-Xlist オプションは、ソースプログラムに不整合がないか、実行時に発生しそうな問題がないかを解析します。コンパイラが行う解析は、大域的に、つまり副プログラム間で行われます。
-Xlist は、境界整列のエラー、副プログラムの引数、共通ブロック、パラメータの数や型の対応のエラー、およびそのほかのさまざまな種別のエラーを報告します。
–Xlist はまた、詳細なソースコードのリストと相互参照表も作成します。
-Xlist オプションでコンパイルされたプログラムには、自動的にその解析ファイルがバイナリファイル中に構築されます。それによって、ライブラリのプログラム間で大域的なプログラム検査を行うことができます。
大域的なプログラムの検査 (GPC) は、-Xlistx オプションで呼び出され、次のことを行います。
別のマシンや異なるオペレーティングシステムの間で、プログラムを移動するときに必要な移植上のいくつかの制約を適用する。
正当ではあっても無駄が多かったりエラーにつながりそうな構造を検出する。
そのほかのバグやあいまいな箇所を指摘する。
さらに具体的には、大域的なチェック機能によって次のような問題が報告されます。
-Xlist オプションをコマンド行に指定すると、コンパイラの大域的なプログラムアナライザが起動されます。以降の節では、-Xlist のサブオプションについて説明します。
例: 基本的な大域的なプログラム検査用に 3 つのファイルをコンパイルします。
demo% f95 -Xlist any1.f any2.f any3.f |
前述の例では、コンパイラは次のことを行います。
any1.lst ファイルに出力リストを生成する。
エラーがなければプログラムのコンパイルとリンクを行う。
通常、-Xlistx によって生成される出力リストはファイルに書き込まれます。直接画面に表示するには、-Xlisto を使用して、出力ファイルを /dev/tty に書き込みます。
例: 端末に表示します。
demo% f95 -Xlisto /dev/tty any1.f |
–Xlist オプションは、出力で利用できる機能を組み合わせたものです。 ほかの -Xlist オプションを指定していない場合は、デフォルトで次のことを行います。
出力リストのファイル名は、最初に現れた入力ソースまたはオブジェクトのファイルの名前で、接尾辞は .lst に置換される。
ルーチン間の不整合に関するエラーメッセージ (リストの該当する箇所に埋め込まれる)
識別子の相互参照表
1 ページ 66 行、1 行 79 カラムのページ割り
呼出しグラフは生成しない。
include ファイルは展開しない。
検査プロセスは、コンパイラコマンド行に指定されたすべてのファイル (接尾辞 .f、.f90、.f95、.for、.F、.F95、.o の付くファイル) を認識します。.o ファイルは、サブルーチンと関数の名前など、大域的な名前に関する情報だけをプロセスに提供します。
次の例で使用される Repeat.f ソースコードを示します。
demo% cat Repeat.f PROGRAM repeat pn1 = 27.005 CALL subr1 ( pn1 ) CALL newf ( pn1 ) PRINT *, pn1 END SUBROUTINE subr1 ( x ) IF ( x .GT. 1.0 ) THEN CALL subr2 ( x * 0.5 ) END IF END SUBROUTINE newf( ix ) INTEGER PRNOK IF (ix .eq. 0) THEN ix = -1 ENDIF PRINT *, prnok ( ix ) END INTEGER FUNCTION prnok ( x ) prnok = INT ( x ) + .05 END SUBROUTINE unreach_sub() CALL sleep(1) END SUBROUTINE subr2 (x) CALL subr1(x+x) END |
例: -XlistX を使用して、エラー、警告、および相互参照を表示します。
demo% f95 -XlistX Repeat.f demo% cat Repeat.lst Repeat.f (月) 3 月 18 18:08:27 2002 ページ 1 FILE "Repeat.f" program repeat 4 CALL newf ( pn1 ) ^ **** エラー #418: 実引数 "pn1" は real ですが、仮引数は integer です。 "Repeat f" の 14 行目を参照してください。 5 PRINT *, pn1 ^ **** エラー #570: 変数 "pn1" は real として参照されていますが、 4 行目では integer として設定されています。 subroutine newf 19 PRINT *, prnok ( ix ) ^ **** エラー #418: 引数 "ix" は integer ですが、仮引数は real です。 "Repeat f" の 22 行目を参照してください。 function prnok 23 prnok = INT ( x ) + .05 ^ **** 警告 #1024: 型 "integer*4" の値への型 "real*4" の 疑わしい代入値 subroutine unreach_sub 26 SUBROUTINE unreach_sub() ^ **** 警告 #338: サブルーチン "unreach_sub" はプログラムから呼び出されません。 subroutine subr2 31 CALL subr1(x+x) ^ **** 警告 #348:"subr1" の再帰的呼び出し。動的呼び出しを参照してください: "Repeat f" の 10 行目 "Repeat f" の 3 行目 相互参照 (月) 3 月 18 18:08:27 2002 ページ 2 相 互 参 照 表 ソースファイル: Repeat.f 凡例: D 定義 / 宣言 U 単純な使用 M 変更箇所 A 実引数 C サブルーチン / 関数呼び出し I 初期設定: DATA または拡張宣言 E EQUIVALENCE での出現 N NAMELIST での出現 L モジュールを使用します 相互参照 (月) 3 月 18 15:40:57 2002 ページ 3 プ ロ グ ラ ム 形 式 プログラム ------- repeat <repeat> D 1:D 相互参照 (月) 3 月 18 03:40:57 午後 2002 ページ 4 関数とサブルーチン ------------------------- INT intrinsic <prnok> C 23:C newf <repeat> C 4:C <newf> D 14:D prnok int*4 <newf> DC 15:D 19:C <prnok> DM 22:D 23:M sleep <unreach_sub> C 27:C subr1 <repeat> C 3:C <subr1> D 8:D <subr2> C 31:C subr2 <subr1> C 10:C <subr2> D 30:D unreach_sub <unreach_sub> D 26:D 相互参照 (月) 3 月 18 03:40:57 午後 2002 ページ 5 変数と配列 -------------------- ix int*4 dummy <newf> DUMA 14:D 16:U 17:M 19:A pn1 real*4 <repeat> UMA 2:M 3:A 4:A 5:U x real*4 dummy <subr1> DU 8:D 9:U 10:U <subr2> DU 30:D 31:U 31:U <prnok> DA 22:D 23:A ------------------------------------------------------------------ 統計情報 (月) 3 月 18 15:40:57 2002 ページ 6 日付: (月) 3 月 18 15:40:57 2002 オプション: -XlistX ファイル: 2 (ソース: 1、ライブラリ: 1) 行: 33 (ソース: 33、ライブラリサブプログラム: 1) ルーチン: 6 (主: 1、サブルーチン: 4、関数: 1) メッセージ: 6 (エラー: 3、警告: 3) |
大域的にクロスチェックする標準的なオプションは (サブオプションなしの) -Xlist です。このオプションは、それぞれが個別に指定できるサブオプションの組み合わせです。
以降に、リスト、エラー、相互参照表を生成するオプションを説明します。複数のサブオプションをコマンド行に指定することもできます。
サブオプションは次の規則に従って追加します。
-Xlist にサブオプションを追加します。
-Xlist とサブオプションの間には空白を置きません。
1つの -Xlist に指定できるサブオプションは 1 つだけです。
サブオプションの組み合せは次の規則に従います。
もっとも一般的なオプションは、-Xlist です (リスト、エラー、相互参照表)。
特定の機能は、-Xlistc、-XlistE、-XlistL、-XlistX を組み合わせて使用することによって指定できます。
これら以外のオプションは、細部指定オプションです。
例: 次の 2 つのコマンド行は同じ結果を生成します。
demo% f95 -Xlistc -Xlist any.f |
demo% f95 - Xlistc any.f |
次の表に、これらの基本的な -Xlist サブオプションだけで生成したレポートを示します。
表 5–1 Xlist の基本的なサブオプション
生成されるレポート |
オプション |
---|---|
エラー、リスト、相互参照表 |
–Xlist |
エラーのみ |
–XlistE |
エラーとソースリストのみ |
–XlistL |
–XlistX |
|
–Xlistc |
次に、-Xlist のすべてのサブオプションを示します。
表 5–2 -Xlist サブオプションの全リスト