今までは常に正常にコンパイルされてきたプログラムが、次のメッセージを出すようになることがあります。
IBM1181I W A WHILE or UNTIL option at the end of a series DO specifications
applies only to the last specification.
このメッセージは次のようなステートメントに対して発せられます。
DO I = 1, 2 WHILE( X = ’Z’ );
このメッセージは、この DO ループは、X = ’Z’ が真であるか否かによらず I = 1 の状態で 一度実行され、そして X = ’Z’ が真である場合、I = 2 の状態でもう一度実行されます。 以下の DO ステートメントは、上記と同じステートメントではありません (上記のステートメントの作成者が意図したものはこちらと考えられます)。
DO I = 1 WHILE( X = ’Z’ ), 2 WHILE( X = ’Z’ )
このような処理を行う場合は、ステートメントを次のようにコーディングするのが最適でしょう。
DO I = 1 TO 2 WHILE( X = ’Z’);
そして、本当に 2 回目の実行の前のみに X = ’Z’ であるか検査したいのなら、 ステートメントを次のようにコーディングするのが最適でしょう。
DO I = 1 TO 2 UNTIL( X ^= ’Z’ );