ILE RPG changes
A non-qualified subfield or format cannot be qualified within a subprocedure
It is not valid to use qualified notation, A.B, for subfields and record formats that are not qualified. Before IBM® i 7.2, the compiler did not always detect this error if the reference to the global subfield or record format was in a subprocedure. Starting in 7.2, the compiler detects this error and diagnostic: RNF7591 - An operand of a qualified name expression is not valid is issued at compile time.
Programs that contain subprocedures that are not prototyped will not compile if DFTACTGRP(*YES) is specified
In releases previous to 7.2, a program that contained a procedure without a prototype definition would successfully compile with DFTACTGRP(*YES) specified. The program object produced was an illegal program that might produce unpredictable results when run.
In release 7.2, the program no longer compiles and diagnostic message RNF1520 - The procedure cannot be defined with DFTACTGRP(*YES) is issued.
Hexadecimal literals cannot be converted to Graphic or UCS-2
Before release 7.2, the RPG compiler supported the use of MOVE and MOVEL to convert a hexadecimal literal to a graphic or UCS-2 variable, and it supported a hexadecimal literal as a parameter to the %GRAPH and %UCS2 built-in functions.
Starting in 7.2, the RPG compiler no longer supports converting a hexadecimal literal to graphic or UCS-2.
If you are affected by this change, you can concatenate an empty character literal to the hexadecimal literal for the %GRAPH and %UCS2 functions. In all cases, you can define a varying length character field and assign it the hexadecimal literal, then specify that character field in place of the hexadecimal literal.
%GRAPH(alphanumeric) now checks for a shift-out character at the beginning of the operand
When the operand of the %GRAPH built-in function is alphanumeric with an EBCDIC CCSID, then the first character must be the shift-out character X'0E'.
Prior to 7.2, the first character was ignored. Starting in 7.2, if the first character is not the shift-out character, message RNX0450 is issued (EBCDIC character value not entirely enclosed by shift-out and shift-in).
RESET *ALL is no longer allowed for an array of data structures in free-form calculations
It is not valid to specify RESET *ALL for an array, including an array of data structures. An error in the compiler previously allowed this, but the error has been corrected for the RESET operation in free-form calculations. No change has been made to fixed-form calculations.
A program with a free-form RESET *ALL for an array of data structures will no longer compile for TGTRLS(*CURRENT) with PTF SI66149 applied.
The compile will fail with message RNF5393 Factor 2 of a CLEAR or RESET operation is not valid.
To correct the error, remove *ALL from the RESET statement.
Specifying an index of (*) for RESET is no longer supported in free-form RPG
It is not valid to specify an index of * (for example, RESET myArray(*)) for an array in a RESET operation. An error in the compiler previously allowed this, but the error has been corrected for the RESET operation in free-form calculations. No change has been made to fixed-form calculations.
Note that specifying an array name for a RESET operation automatically resets every element in the array.
A program with a RESET operation in the form RESET array(*) will no longer compile for TGTRLS(*CURRENT) with PTF SI66149. The compile will fail with message RNF5343 - Array has too many missing indexes. To correct the error, remove the indexing from the array name.