このメッセージは、従来のコンパイラーでは OK だったけれども、新しいコンパイラーではさらに良い代替があるという、コーディング実践をアラートするものです。属性 STATIC INIT ではなく、属性 VALUE で名前付き定数を宣言することができるようになりました。
この変更は、特に次のようなコードで役立ちます。
test: proc( c );
dcl c char(20);
dcl upper char(26) static init('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
dcl lower char(26) static init('abcdefghijklmnopqrstuvwxyz');
c = translate( c, upper, lower );
end;
名前付き定数 upper と lower は STATIC INIT として宣言されているため、新旧どちらのコンパイラーもランタイムに変換テーブルを作成します。 これは、非常に負荷がかかります。 しかし、新しいコンパイラーでは、次の通知メッセージも発行されます。
IBM2812I I Argument number 2 to TRANSLATE built-in would lead to
much better code if declared with the VALUE attribute.
IBM2812I I Argument number 3 to TRANSLATE built-in would lead to
much better code if declared with the VALUE attribute.
両方の宣言の STATIC INIT を VALUE に変更すると、これらのメッセージは出なくなり、コンパイラーはより良いコードを生成します。