最適化 FORTRAN における書式付き READ 文の不良について（お知らせ）
システム運用係
SR8000 最適化 FORTRAN77 及び最適化 FORTRAN90 において、書式付き READ 文にてデーターが正しく入力されない不良があることが判明しました。本不良により処理結果がエラーまたは不正となる場合があるため、2004 年 8 月 9 日に不良対策版をインストールしております。つきましては、不良対策以前にコンパイルを行ったロードモジュールについて、以下のとおり、確認及び不良への対処を行われるようお願いします。
今回のコンパイラー不良につきましては、利用者の皆様に御迷惑をお掛けしてしまうことになりましたことを深くお詫び致します。
また、本不良の発生条件に、書式付き入出力での変換処理を擬似ベクトル化すること（実行時オプションに runst(pvfio(1))を指定する）がありますが、8 月 20 日 10 時の時点で本オプションの扱いを 8 月 20 日 10 時以降に作成したロードモジュールの実行時にはデフォルトで runst(pvfio(1))が設定され、20 日 10 時以前に作成したロードモジュールの実行時にはデフォルトで runst(pvfio(0))が設定されるよう変更しました。このため、不良対策前に作成したロードモジュールの実行については、実行時オプションに runst(pvfio(1))を指定しない限り本不良は発生しません。詳細については後述を参照して下さい。

・該当バージョン
最適化 FORTRAN77 バージョン 01‑03 から 01‑05‑/A まで（2001.4.2〜2004.8.9）
最適化 FORTRAN90 バージョン 01‑03 から 01‑06 まで（2001.4.2〜2004.8.9）

・不良内容
次の 2 件のうちいずれかの現象が発生します。
１．READ 文の 2 個目以降の入力項目に誤った値が入力される。
２．1 の現象に加えて、READ 文の入力時に実行時エラーKCHF361R（入力データーに不当な文字がある）が発生する。

・発生条件
以下の条件が全て重なる場合に、発生する場合があります。
１．実行時オプションに runst(pvfio(1))を指定している。
（不良対策前までデフォルト）
２．READ 文に入力項目並びが 2 個以上あり、以下の(a)または(b)に該当する。
（a）1 個目の入力項目は入出力 DO 形反復で、2 個目以降は任意の入力項目である。
（b）1 個目の入力項目は配列名で、2 個目の入力項目は入出力 DO 形反復である。
３．2 は書式付きの READ 文であり、FORMAT 文の文番号による書式指定をしている。

４．2 の READ 文には UNIT 指定、FMT 指定以外の指定子を指定していない。
５．2 の READ 文の入力元はファイルである。
６．2 の READ 文の 1 個目の入力項目に読み込まれるファイルの 1 行あたりの長さが、FORMAT 文で指定した 1 行の長さと全て一致する。
７．5 のファイル内の各データーは、書式項目の欄幅内に右揃えで記述されている。
８．3 の FORMAT 文に記述された書式項目並びは 1 個である。
９．8 の書式項目は次のいずれかである。
（a）Iw 形編集記述子で、欄幅 w は 15 以下である。
（b）Ew.d, Dw.d, Qw.d 形編集記述子で、欄幅 w<=32、1<=小数部幅 d<=9、桁移動数=0かつ、欄幅 w−小数部幅 d−4−3>＝0 の条件を満たす。
（c）Ew.dEe 形編集記述子で、欄幅 w<=32、1<=小数部幅 d<=9、1<=指数部幅 e<=3、桁移動数=0 かつ、欄幅 w−小数部幅 d−指数部幅 e−2−3>=0 の条件を満たす。
発生例
以下の例では、変数 L,M に不正な値が格納されます。（変数 K(1)〜K(6)は正常）<ソースコード>
READ(5,100)(K(I),I=1,6),L,M
100 FORMAT(2I5)<入力データー> ※△は空白を示す。

<各変数の値>△△１００△△１０１K(1) = 100

K(2) = 101△△１０２△△１０３

K(3) = 102

K(4) = 103△△１０４△△１０５

K(5) = 104

K(6) = 105△１０００△２０００L

M= 100= 1010

・確認方法
本不良のチェックツールとして fiochk 及び fiof77、fiof90 を用意しましたので、以下の手順で FORTRAN プログラムの確認を行って下さい。
なお、(1)はソースプログラム中に不具合を起こすような記述の存在をチェックするツールの説明、(2)は不具合箇所を特定するツールの説明です。
また、(2)の処理を御希望されない場合は、(1)で判定されたソースプログラムを対策後のコンパイラーで再コンパイルすることでも対策が可能です。

(1) fiochk
このコマンドは本不良についてソースプログラムのチェックを行います。
使用方法は次のとおりで普通のコンパイルと同様に実行します。

fiochk [オプション] fort1.f (fort2.f fort3.f ...)
‐オプションにはコンパイル時に指定するオプションと同じものを指定して下さい。
‐ソースプログラムは" *.f "のようにまとめてチェック可能です。
本不良の発生条件に該当しない場合は、通常のコンパイル時のメッセージに加え、最後に****okと表示されます。この場合、不良対策前のコンパイラーでコンパイルしたロードモジュールであっても本不良は発生しません。
本不良の発生条件に該当すると判定された場合は、通常のコンパイルメッセージに加え、標準出力に以下のメッセージが表示されます。
‑‑> PVFIO Check‑up > fort.f, LINE= 行番号‐INCLUDE ファイルに該当文が存在した場合は「LINE=I‑行番号」と出力されます。
そして、最後に****ngと表示されます。
fiochk で本不良の発生条件に該当すると判定された場合は、次の fiof77 または fiof90 コ
マンドで実際に不正動作をしないかチェックして下さい。

(2) fiof77, fiof90
このコマンドは実際にソースプログラムをコンパイルしてロードモジュールを実行させ、本不良が発生するかチェックを行います。
fiof77 [オプション] fort.fまたは
fiof90 [オプション] fort.f‐オプションにはコンパイル、リンク時に指定するオプションと同じものを指定して下さい。
上記のコマンドで作成されたロードモジュールを実行します。
本不良の発生条件に該当しない場合は、通常の実行結果を出力して終了します。この場合、fiochk で「本不良の発生条件に該当する」と判定されていても、不良対策前のコンパイラーでコンパイルしたロードモジュールと入力ファイルの組み合わせでも、本不良は発生しません。

本不良の発生条件に該当すると判定された場合は、以下のようにエラーメッセージとトレースバック情報を表示して、処理を停止します。
KCHF2000R Incorrect data has been input at this READ statement.
KCHF926R read error occurs on file.
0x1007bcf8

hf̲err+0x678

0x10044d4chf̲ioerr+0x2b4

0x100033c8hf̲fio+0xfc

0x10000a14

̲hf̲fio+0x28

0x1000051c

MAIN+0x50

0x10000430

̲̲start+0x1f0[fort.f:行番号]

fiochk、fiof77（または fiof90）の両コマンドで本不良の発生条件に該当すると判定された場合は、対策後のコンパイラーで再コンパイルされますようお願いします。

・注意事項
発生条件 1 の実行時オプション runst(pvfio(1))＊は、実行時のデフォルトオプションに含まれているため、2004 年 8 月 9 日からデフォルトを runst(pvfio(0))に変更しております。
そのため、本不良の対象となるプログラムであっても（runst(pvfio(1))を特に指定しなければ）正常に動作しますが、実行時に書式付き入出力の性能が低下する恐れがあります。これを回避したい場合は、本不良による不具合の有無を確認の後、以下のように対応して下さい。
なお、8 月 20 日 10 時以降にコンパイルしたプログラムは、デフォルトが runst(pvfio(1))となるよう設定していますので、以下の対応は不要です。
− 不具合がない場合実行時オプションに、runst(pvfio(1))を付けて実行して下さい。
例）% a.out ‑F'runst(pvfio(1))'− 不具合がある場合対策後のコンパイラーで再コンパイルして実行して下さい。
例）% a.out＊runst(pvfio(0￨1))は書式付き入出力での変換処理を擬似ベクトル化することで高速化を行なうかどうかを指定します。（0：しない、1：する）

ご不明な点はシステム運用係（03‑5841‑2712）までお問い合わせ下さい。