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.
This message is used by %NOTE statements with a return code of 4.
Attributes and declares must be consistent.
%a: proc; %end; %dcl a;
Attributes must be consistent.
dcl a fixed char;
A comment ends in a different file than it begins. This may indicate that an end-of-comment statement is missing.
A string ends in a different file than it begins. This may indicate that a closing quote is missing.
A delimiter (for example, a blank or a comma) is required between all identifiers and constants.
dcl 1 a, 2 b, 3c;
Using one END statement to close more than one group of statements is permitted, but it may indicate a coding error.
The indicated character is missing, and there are no more characters in the source. The missing character has been inserted by the parser in order to correct your source.
The indicated character is missing and has been inserted by the parser in order to correct your source.
%dcl jump fixed; %skip %jump = 2;
The %CONTROL statement must be followed by FORMAT or NOFORMAT option enclosed in parentheses and then a semicolon.
Skip amounts greater than 999 are not supported.
%skip(2000);
The CICS option must be in effect if the source contains EXEC CICS statements.
The CSPM option must be in effect if the source contains EXEC CSPM statements.
The DLI option must be in effect if the source contains EXEC DLI statements.
WHEN or OTHERWISE clauses are not required on SELECT statements, but their absence may indicate a coding error.
SELECT statements do not require WHEN clauses, but their absence may indicate a coding error.
A FIXED BINARY constant must contain 31 or fewer digits.
The maximum precision for FIXED DECIMAL constants is specified by the FIXEDDEC suboption of the LIMITS compiler option.
Float binary constants are limited to 64 digits.
Float decimal constants are limited to 18 digits.
The precision for a float literal is implied by the number of digits in its mantissa. For instance 1e99 is implicitly FLOAT DECIMAL(1), but the value 1e99 is larger than the largest value a FLOAT DECIMAL(1) can hold.
The named option is not part of the PL/I language definition as specified in the LANGLVL compiler option.
The specified suboption is not one of the supported suboptions of the named option.
*process pp(macro(’fixed(long)’));
The named option requires a suboption.
*process pp(macro(’fixed’));
A closing parenthesis is missing in the specification of the named option.
*process pp(macro(’fixed(bin’));
The named option is not, in fact, an option.
*process pp(macro(’float’));
The %LINE directive must be followed, with optional intervening blanks, by a parenthesis, a line number, a comma, a file name and a closing parenthesis.
%line( 19, test.pli );
All variables should be declared.
If the operand has a numeric type, the result is the length that value would have after it was converted to string. The length of a numeric type is NOT the same as its storage requirement.
To eliminate this message, apply the CHAR or BIT built-in function to the first argument.
dcl i fixed bin; display( substr(i,4) );
An argument to the function reference is missing. A null string or zero will be passed, as appropriate, for the missing argument.
%dcl a fixed; %a = max(n,);
This message is not produced if the LEAVE statement specifies a label. In the following loop, the LEAVE statement will cause only the immediately enclosing DO-group to be exited; the loop will not be exited.
do i = 1 to n; if a(i) > 0 then do; call f; leave; end; else; end;
This message is produced when a variable is compared to a constant equal to the largest or smallest value that the variable could assume. In the following loop, the variable x can never be greater than 99, and hence the implied comparison executed each time through the loop will always result in a ’1’b.
do x pic’99’; do x = 1 to 99; end;
ENTRY declares should not specify a RETURNS attribute. In the example below, the "returns( char )" should be omitted.
%dcl a entry returns( char );
In a PROCEDURE statement, any RETURNS attribute should be enclosed in parentheses following the RETURNS keyword. In the example below, the "char" attribute should be specified as "returns( char )".
%a: proc char ; return( ’1729’ ); %end;
References in open code to PROCEDUREs that have parameters should always include at least an empty argument list. For example, the "display( a )" below should be "display( a() )".
%a: proc( x ) char ; dcl x char; return( ’1729’ ); %end; %act a; display( a );
There are too few arguments for the specified procedure. Null strings or zeros will be passed, as appropriate, for the missing arguments.
%a: proc( x ) char ; dcl x char; return( ’1729’ ); %end; %act a; display( a() );
There are too many arguments for the specified procedure. The excess arguments will be ignored.
%a: proc( x ) char ; dcl x char; return( ’1729’ ); %end; %act a; display( a(1,2) );
Preprocessor variables should be declared with an attribute such as CHAR or FIXED. This message could indicate that there is an extraneous comma in the declare statement as in this example.
%dcl a, char;
This message is used by %NOTE statements with a return code of 8.
In certain contexts, for example after an IF-THEN clause, only executable statements are permitted. A DECLARE, DEFINE, DEFAULT or FORMAT statement has been found in one of these contexts. A null statement, (a statement consisting of only a semicolon) will be inserted before the offending statement.
The COUNTER built-in function should not be invoked more than 99999 times.
Under RULES(NOMULTICLOSE), there should be no multiple closure of groups in your source program.
The second argument to built-in functions such as COPY and REPEAT must be nonnegative.
x = copy( y, -1 );
The default lower bound is 1, but the upper bound must be greater than the lower bound.
dcl x(-5) fixed bin;
In a B3 literal, each character must be either 0-7.
An E in a FLOAT constant must be followed by at least one decimal digit (optionally preceded by a sign).
The LBOUND, HBOUND, and DIMENSION built-in functions require two arguments when applied to arrays having more than one dimension.
dcl a(5,10) fixed bin; do i = 1 to lbound(a);
The DIMENSION, HBOUND and LBOUND built-in functions require that the second argument be positive.
The second argument to the LBOUND, HBOUND, and DIMENSION built-in functions must be no greater than the number of dimensions of their array arguments.
dcl a(5,10) fixed bin; do i = 1 to lbound(a,3);
Level 1 variable names must not be repeated in the same block.
dcl a char, a fixed;
THEN keyword must be part of any IF statement.
Only scalars may be activated.
Labels may not be activated.
THEN clauses are valid only immediately after an IF <expression>.
%if a > b; %then;
ELSE clauses are valid only immediately after an IF-THEN statement.
do; if a > b then; end; else a = 0;
A Label on END statement must match a LABEL on an open DO, PROCEDURE, or SELECT statement.
a: do; ... end b;
After an OTHERWISE unit in a SELECT statement, only an END statement is valid.
select; when ( ... ) do; end; otherwise do; end; display( ... );
Any %END statement should be part of a %PROCEDURE-%END, %DO-%END or %SELECT-%END group.
During the conversion of a user expression during the compilation, the target string was found to be shorter than the source, thus causing the STRINGSIZE condition to be raised.
If all the arguments in a SUBSTR reference are constants or restricted expressions, the reference will be evaluated at compile- time and the STRINGRANGE condition will occur if the arguments do not comply with the rules described for the SUBSTR built-in function.
a = substr( ’abcdef’, 5, 4 );
LEAVE/ITERATE must specify a label on an open DO loop.
%a: do jx = 1 to 1729; %leave b; %end;
ITERATE/LEAVE statements are valid only inside DO groups.
%a: do jx = 1 to 1729; %end; %leave a;
GX literals must represent graphic strings and hence must contain a multiple of 4 hex digits.
x = ’00’gx;
A variable has been declared with an upper bound that is less than its lower bound. The upper and lower bounds will be swapped in order to correct this. For example, DECLARE x(3:1) will be changed to DECLARE x(1:3).
All identifiers must be contained in 31 bytes or less. PL/I DBCS identifiers must have 14 or fewer DBCS characters.
There is no language element of the form 1su.
dcl a(10) def b(1su, 1sub );
In a BINARY constant, each digit must be a zero or one.
In a BIT literal, each character must be either zero or one.
The indicated character is not part of the PL/I character set. This can occur if a program containing NOT or OR symbols is ported from another machine and those symbols are translated to a character that is not part of the PL/I character set. Using the NOT and OR compiler options can help avoid this problem.
In a hex literal, each character must be either 0-9 or A-F.
The statement entered could not be parsed because the specified element is invalid.
Under LANGLVL(SAA), identifiers must start with an alphabetic character or with one of the extralingual characters. They may not start with an underscore. Under LANGLVL(SAA2), identifiers may start with an underscore, although names starting with _IBM are reserved for use by IBM.
The indicated character is not part of the PL/I character set, but was immediately followed by the same character. This can occur if a program containing an OR symbol is ported from another machine and this symbol is translated to a character that is not part of the PL/I character set. Using the OR compiler option can help avoid this problem.
The indicated character is not part of the PL/I character set, but was immediately followed by an =, < or > symbol. This can occur if a program containing a NOT symbol is ported from another machine and this symbol is translated to a character that is not part of the PL/I character set. Using the NOT compiler option can help avoid this problem.
To determine if a statement is an assignment or another PL/I statement, many elements of the statement may need to be examined. If too many have to be examined, the compiler will flag the statement as in error. For instance, the following statement could be a DECLARE until the equal sign is encountered by the lexer.
dcl ( a, b, c ) = d;
A WHEN or OTHERWISE may be missing.
select; i = i + 1; when ( a > 0 ) ...
Extents must be positive.
dcl x char(-10);
In a statement-form procedure invocation, each parameter may be specified only once. Any subsequent specifications will be ignored. In the example code, 17 would be returned for both invocations of P.
%p: proc( a ) stmt returns( char ); dcl a char; return( a ); %end; %act p; display( p a(17) a(29); ); display( p(17) a(29); );
In a statement-form procedure invocation, any keyword specified must be the name of a parameter for that procedure.
%p: proc( a ) stmt returns( char ); dcl a char; return( a ); %end; %act p; display( p a(17) b(29); );
Each parameter in a procedure should be declared.
%a: proc( b, c ); dcl b fixed; %end;
Labels are not permitted on DECLARE statements or on WHEN and OTHERWISE clauses.
The BUILTIN attribute can be applied only to identifiers that are the names of built-in functions or subroutines.
The named attribute is not supported by the macro facility.
%dcl a char external;
A right parenthesis is probably missing. If this occurs in the source, all the characters after the unmatched left parenthesis in the source will be interpreted as parameters to the function. If this occurs in a replacement string, all the characters after the unmatched left parenthesis in the string will be interpreted as parameters to the function.
The source should contain END statements for all PROCEDUREs, DO groups, and SELECT statements, as well as statements for all IF-THEN and ELSE clauses.
Declarations for internal procedures are not permitted.
a: proc; dcl b entry options(byvalue); b: proc;
A WHEN or OTHERWISE clause has been found outside of a SELECT statement.
An END statement enclosing a statement such as DO or SELECT has been found before the statement required after ELSE.
do; if a > b then ... else end;
An END statement may be misplaced or a semicolon may be missing.
An END statement may be misplaced or a semicolon may be missing.
An END statement may be misplaced or a semicolon may be missing.
The source file contains statements after the END statement that closed the first PACKAGE or PROCEDURE. These statements will be ignored, but their presence may indicate a programming error.
Subscripts can be specified only for elements of an array.
Otherwise the STRINGRANGE condition would be raised.
Otherwise the STRINGRANGE condition would be raised.
Otherwise the STRINGRANGE condition would be raised.
Otherwise the STRINGRANGE condition would be raised.
The maximum number of dimensions allowed for a variable, including all inherited dimensions, is 15.
An */ was found when there was no open comment.
See the Language Reference Manual for the list of supported compiler directives.
A listing control statement, even when in a preprocessor procedure, must be preceded by a "%".
%a: proc; skip; %end;
An X literal may not contain an odd number of digits.
More arguments were specified in an ENTRY reference than were defined as parameters in that ENTRY’s declaration.
dcl e entry( fixed bin ); call e( 1, 2 );
More arguments were specified for the indicated built-in function than are supported by that built-in function.
i = acos( j, k );
The indicated keyword (UNSIGNED in the example below) is not defined in the SAA level-1 language.
dcl x fixed bin unsigned;
The definition of the SAA level-1 language does not include S, D, and Q floating-point constants.
The definition of the SAA level-1 language does not permit using underscores in numeric and hex constants.
The definition of the SAA level-1 language does not permit using asterisks for structure element names.
The definition of the SAA level-1 language does not include XN constants.
Under LANGLVL(SAA), the VERIFY and INDEX built-in functions are supposed to have exactly 2 arguments.
i = verify( s, j, k );
Under LANGLVL(SAA), the DIM, LBOUND and HBOUND built-in functions are supposed to have 2 arguments.
i = dim( a );
This message is used by %NOTE statements with a return code of 12.
The number of arguments must match the number of parameters in the ENTRY declaration.
Macro procedures may not be nested.
Inside a procedure, statements should not begin with a percent. The %DCL in the example below should be just DCL.
%a: proc( x ) returns( char ); %dcl x char; return( ’<’ || x || ’>’ ); %end;
The compilation requires more virtual memory than is available. It may help to specify one or more of the following compiler options: NOTEST, NOXREF, NOATTRIBUTES, and/or NOAGGREGATE
An expression contains the named built-in function with an argument that is not a parameter.
An expression contains the named built-in function with an argument that is not a reference.
In the macro facility, all subscripts must be scalar expressions.
This applies to the RANK built-in function.
An expression contains the named built-in function with a first argument that is not an array. This message applies, for instance, to the DIMENSION, HBOUND, and LBOUND built-in functions.
If a third argument is given for one of the built-in functions INDEX or VERIFY, it must be positive.
The second argument for the built-in functions CHARACTER, BIT, and GRAPHIC must be zero or greater.
Supply the minimum number of arguments required.
%INCLUDE must be followed by a name and either a semicolon or else a second name in parenthesis and then a semicolon.
The maximum length of the file specification is 8 characters.
%INCLUDE must be followed by a file name, not just a semicolon.
The excess parameters will be removed from the proc statement.
Executing such a statement would most likely cause a protection exception.
%dcl a(5:10) fixed; %a(1) = 0;
Executing such a statement would most likely cause a protection exception.
%dcl a(5:10) fixed; %a(20) = 0;
It must be possible to compute the value of the DIMENSION built-in function for an array. In DECLARE x(x:y), ( y-x+1) must be less than 214748648.
Arrays are limited to 2**20 elements.
The number of subscripts given for a variable must match that variable’s number of dimensions
The number of subscripts given for a variable must match that variable’s number of dimensions
Array expressions may not, for instance, be assigned to structures or scalars.
All RETURN statements inside functions must specify a value to be returned.
%a: proc returns( fixed ); return; %end;
A statement of the form RETURN(x) is valid inside only PROCEDUREs that are defined with a RETURNS attribute.
%a: proc; return( ’this is invalid’ ); %end;
Functions must contain at least one RETURN statement.
The target in an assignment must be character or fixed element reference. Pseudovariables are not supported.
Statement labels may be used only in GOTO, LEAVE and ITERATE statements.
Compound concatenate assignments with fixed targets are not supported.
%dcl a fixed; %a = ’0’; %a ||= ’1’;
Compound arithmetic assignments with character targets are not supported.
%dcl a char; %a = ’0’; %a += ’1’;
The compiler’s space for evaluating expressions has been exhausted. Rewrite the expression in terms of simpler expressions.
The result of a concatenation must not have a length greater than the maximum allowed for a string.
The result of COPY and REPEAT must not have a length greater than the maximum allowed for a string.
The only valid aggregate expression is the use of an array name as the first argument to the HBOUND or LBOUND built-in functions.
Bit operations are limited to strings of length 32767 or less.
The TRANSLATE built-in function is not supported if the second or third argument is longer than 32767 characters.
The result of a COMMENT or QUOTE built-in function must not be a string that would have length greater than the supported maximum.
If you must use INCLUDE or XINCLUDE as a macro name, put the colon on the same line as the name.
If you must use INCLUDE or XINCLUDE as a macro statement label, put the colon on the same line as the name.
If you must use INCLUDE or XINCLUDE as a macro variable name, put the equals sign in the assignment on the same line as the name. For example, change the first assignment below into the second.
%xinclude = 17; %xinclude = 17;
The target of a GOTO cannot be inside a DO loop unless the GOTO itself is in the same DO loop.
The INCLUDE file could not be found, or if found, it could not be opened.
The nesting of PROCEDURE, DO, SELECT and similar statements is greater than that supported by the compiler. Rewrite the program so that it is less complicated.
Support for the indicated built-in function has been discontinued.
Support for the indicated statement has been discontinued.
iSUB is only supported in syntax checking.
DO statements can be nested only 100 deep. Simplify the program.
IF statements can be nested only 100 deep. Simplify the program.
SELECT statements can be nested only 50 deep. Simplify the program.
Blocks may be nested only 30 deep.
Check that the CICS modules are accessible, otherwise report this error to IBM.
Report this error to IBM.
Report this error to IBM.
Report this error to IBM.
Report this error to IBM.
Report this error to IBM.
Report this error to IBM.
The named attributes, for example PARAMETER and INITIAL, are mutually exclusive.
All statement labels in any block must be unique.
x in GOTO x must have type LABEL. x must not have type FORMAT.
x in GOTO x must not be an array.
Sister procedures must have different names.
% b: proc; % end; % b: proc; % end;
The source contains either no statements or all statements that it contains are invalid.
A FIXED BINARY constant must contain 31 or fewer digits.
The maximum precision of FIXED DECIMAL constants is set by the FIXEDDEC suboption of the LIMITS compiler option.
The exponent in a FLOAT BINARY constant may contain no more than 5 digits.
The mantissa in a FLOAT BINARY constant may contain no more than 64 digits.
The exponent in a FLOAT BINARY constant may contain no more than 4 digits.
The mantissa in a FLOAT BINARY constant may contain no more than 18 digits.
The number of bytes used to represent a constant in your program must not exceed 30720. This limit holds even for bit strings where the internal representation will consume only one-eighth the number of bytes as the external representation does.
Any complex, scaled or floating point constant will be converted to an integer value.
%a = 3.1415;
G, GX, M, A and E string suffixes are not supported.
%a = ’31’e;
In the invocation of a statement-form procedure, all characters that are not part of comments or key names should be enclosed in parentheses following one of the keys. For example, the "+" in the display statement below should not be present.
%a: proc( x ) stmt returns( char ); dcl x char; return( 1729 ); %end; %act a; display( a + x(5); );
Under the FIXED(BIN), decimal constants that represent any valid FIXED BIN(31) number are supported.
Compilation will terminate when the number of messages has exceeded the limit set in the FLAG compiler option.
Evaluation of an expression raised the named condition.
%a = a / 0;
Each identifier in a parameter list must be unique.
a: proc( b, c, b );
ITERATE is not valid inside type-I do groups.
RETURN statements are valid only inside procedures.
INCLUDE statements are permitted only outside any preprocessor procedures.
%a: proc; include sample; %end;
Parameters to macro procedures must be no longer than 32767 bytes.
An end-of-comment marker is probably missing.
A closing quote is probably missing.
An end-of-comment marker is probably missing.
A closing quote is probably missing.
ANSWER statements are valid only inside procedures.
ANSWER statements are not valid inside functions.
%a: proc returns( char ); answer( ’this is invalid’ ); return( ’this is ok however’ ); %end; %b: proc; answer( ’this is valid’ ); %end;
A rescan of a replacement string or a rescan of a string returned by a preprocessor has caused further replacement leading to another rescan etc., and the maximum depth of rescanning was exceeded.
For instance, the following macro, which is meant to count the number of dcl statements in a compilation, would produce this message. If the %ACTIVATE statement specified NORESCAN, it would work correctly.
%dcl dcl_Count fixed; %dcl_Count = 0; %dcl: proc returns( char ); dcl_count = dcl_count + 1; return( ’dcl’ ); %end; %activate dcl;
DBCS shift codes must be paired.
DBCS shift codes must be paired.
Hex strings (strings ending in one of the suffixes X, BX, B4, GX or XN), bit strings, (strings ending in the suffix B), and character strings not ending in the suffix M must contain only SBCS characters.
Mixed SBCS and DBCS is allowed only in M constants.
Outside of comments, SBCS can be encoded as DBCS only as part of an identifier.
A procedure must not invoke itself directly or indirectly.
The named built-in function may be used only inside procedures.
A procedure must be defined (correctly) before it can be invoked.
The source ended during a scan when a right parenthesis or semicolon was required.
%a: proc() stmt returns( char ); return( ’1729’ ); %end; %dcl a entry; a /* and no more source follows */
The named source file could not be opened. Make sure that the file is named correctly, that it exists and that it is readable.
This message indicates that there is an error in the macro preprocessor. Please report the problem to IBM.
This message indicates that there is an error in the front end of the compiler. Please report the problem to IBM.
This message is used by %NOTE statements with a return code of 16.