This message is used in building the options listing.
The statement following the statement for which this message was issued were merged with that statement.
The specified number of statements following the statement for which this message was issued were merged with that statement.
This message is used to report back end informational messages.
All variables should be declared except for contextual declarations of built-in functions, SYSPRINT and SYSIN.
This message is used by %NOTE statements with a return code of 0.
A comment ends on a different line than it begins. This may indicate that an end-of-comment delimiter is missing.
A string ends on a different line than it begins. This may indicate that a closing quote is missing.
There is no declare statement for the named variable, but it has been given the indicated attribute because of its usage. For instance, if the variable is used as a locator, it will be given the POINTER attribute.
The OS/370 PL/I and PL/I for MVS compilers would have mapped this to 2 bytes.
If the REFER object has any other attributes, it will be converted to and from REAL FIXED BIN(31,0) via library calls.
The OS/370 PL/I and PL/I for MVS compilers would have handled UNSPEC applied to an array as an array of scalars.
If the ORDER option applies to a block, optimization is likely to be inhibited, especially if the block contains ON-units that refer to variables declared outside the ON-unit.
A GET DATA statement can alter almost any variable, and a PUT DATA statement requires almost all variables to be stored home anytime a PUT DATA statement might be executed. Both of these requirements inhibit optimization.
The INITIAL attribute has been specified for a variable with the attributes RESERVED STATIC. Unless such a variable is listed in the EXPORTS clause of a PACKAGE statement, the variable will not be initialized.
This message applies to the ADDR, CURRENTSTORAGE/SIZE and STORAGE/SIZE built-in functions. Applying any one of these built-in functions to an unaligned bit variable may not produce the results you expected.
When a string with * extent or an array with * extents is passed, PL/I normally passes a descriptor so that the called routine knows how big the passed argument really is. The NODESCRIPTOR attribute indicates that no descriptor should be passed; this is invalid if the called routine is a PL/I procedure.
dcl x entry( char(*), fixed bin(31) ) options( nodescriptor );
If one of the built-in functions ADD, DIVIDE, MULTIPLY or SUBTRACT is invoked with argument that have type FIXED, if either operand has a non-zero scale factor, the result will have type FIXED DEC.
This message can be used to help find code that may be very expensive if executed as part of a loop or to find code involving conversions of unlike types.
The ERROR condition will be raised if no WHEN clause is satisfied.
The PL/I language rules require this, but it might be a little surprising. In the following code fragment, for instance, the display statement would display the value of x.y.
a: proc; dcl y fixed bin init(3); call b; b: proc; dcl 1 x, 2 y fixed bin init(5), 2 z fixed bin init(7); display( y ); end; end a;
Use of any of the constants 365, 1900 or ’19’ may indicate a date calculation. If this is true, you should examine the calculation to determine if it will be valid after the year 1999.
The indicated was inferred to contain a two-digit year because, for example, it was assigned the DATE built-in function.
The control variable in the DO loop is a 1-byte integer, 2-byte integer, fixed decimal or fixed picture, and consequently, the code generated for the loop will not be optimal.
Under OPT(2), any specification of TEST hooks stronger than TEST(BLOCK) is not supported.
The named short floating-point constant cannot be exactly represented. It could be more accurately represented if it were specified as a long floating-point constant. For example, the 1.3E0 cannot be exactly represented, but could be better represented as 1.3D0.
If a DO specification has no clause such as TO, BY or REPEAT that could cause the loop to be repeated, then the UNTIL clause will have no effect on the loop and will be ignored.
do x = y until ( z > 0 ); ... end;
If a procedure contains a RETURN statement, it should have the RETURNS attribute specified on its PROCEDURE statement.
a: proc; return( 0 ); end;
The AUTOMATIC variables in a block may be used in the declare statements and the executable statements of any contained block, but in the block in which they are declared, they should be used only in the executable statements.
dcl x fixed bin(15) init(5); dcl y(x) fixed bin(15);
The named procedure is not external and is never referenced in the compilation unit. This may represent an error (if it was supposed to be called) or an opportunity to eliminate some dead code.
Under RULES(IBM), when an arithmetic operation has an operand that is FIXED BIN and an operand that is FIXED DEC with a non-zero scale factor, then the FIXED DEC operand will be converted to FIXED BIN.
This message can be used to help find code that may be very expensive if executed as part of a loop. It may be produced, for example, if your code refers to an element of a structure that uses REFER. If the structure uses multiple REFERs and the element occurs after the last REFER, the single reference to that element may produce multiple copies of this message (because multiple library calls will be made).
This message is issued when a PUT or GET STRING EDIT statement has been optimized by the compiler so that most of it is done inline.
This message will flag statements such as the following, where "true" is a BIT(1) STATIC INIT(’1’b). It would be better if "true" were a named constant, i.e. if it were declared with the VALUE attribute rather than STATIC INIT
if ( a < b ) = true then
This message can be used to help find code that may be very expensive if executed as part of a loop or to find code involving conversions of unlike types.
It is generally very unwise to pass a label to another routine. It would be good to think about redesigning any code doing this.
If the LIMITS option specifies a maximum FIXED precision greater than 31, then an operation involving a FIXED DEC and a FIXED BIN operand might produce an 8-byte integer result even if both operands are "small". For example, if you add a FIXED DEC(13) and a FIXED BIN(31), the result would be an 8-byte integer (because a FIXED DEC(13) value might be too large to fit in a 4-byte integer). To avoid this, you could apply the DECIMAL built-in function to the FIXED BIN operand.
In certain conversions of FIXED BIN(p,q) to FIXED DEC, the old compiler slightly rounded the result if q was positive.
If the control variable in a DO loop is a PICTURE variable, then more code will be generated for the loop than if the control variable were a FIXED BIN variable. Moreover, such loops may easily be miscoded so that they will loop infinitely.
For functions such as VERIFY(x,y), if y is a constant, it is much better for performance to declare y with the VALUE attribute rather than with the INITIAL attribute.
This message can be used to help find code that may be expensive if invoked many times. This message may be produced for ALLOCATE statements for BASED and CONTROLLED variables with non-constant extents, and it may also be produced for the prologue of PROCEDUREs that use AUTOMATIC variables with non-constant extents.