Fault monitoring is very dependent on the form of the compiler used. We describe below the monitoring now given (1/3/65). It will probably change with time but all changes will be designed to give the maximum information
1. Faults due to [NAME]'s not having been declared.
NAME[NAME]NOT SET SWITCH[NAME]NOT SET
2. Faults, found in arithmetical instructions, which give special indications but which are most often caused by [NAME]'s not being declared at the current level. These special indications arise when the [NAME]'s appear in the level above.
NAME[NAME]CANNOT APPEAR ON L.H.S. SWITCH[NAME] IN EXPR ROUTINE[NAME] IN EXPR CALL FOR ADDR OF NON-VARIABLE CALL FOR CONTROL NO OF NON-ROUTINE[NAME]
3. Arithmetic faults.
COMPLEX[NAME] IN EXPR i IN EXPR REAL[NAME] IN EXPR REAL CONST IN INTEGER EXPR CALL FOR DIM OF NON-ARRAY NAME CALL FOR BOUNDS OF NON-ARRAY NAME NAME[NAME]HAS WRONG NUMBER OF PARAMETERS
(This may be due either to the wrong number of parameters appearing or to the omission of a multiplication sign before a left bracket)
4. Faults found at the end of each block or routine.
LABEL [N] NOT SET There is a reference to label[N] or CASE [N] NOT SET a case [N] which has not been set NO LABELS SET TOO FEW REPEATS cycle's do not match repeat's
5. Other faults.
AP FAULT An actual parameter fault:the call sequence is not consistent with the routine spec FP FAULT A formal parameter fault: the routine heading is not consistent with the routine spec. LABEL[N]SET TWICE Two or more instructions CASE[N] SET TWICE have been given the same SWITCH[NAME]SET TWICE label NAME[NAME]SET TWICE The name has been used for more than one purpose at a given textual level SWITCH[NAME]OUT OF RANGE A label[NAME]([N]) appears where [N] lies outside the declared range of the switch[NAME] SWITCH[NAME]OUT OF RANGE A label[NAME]([N]) appears where [N] lies outside the declared range of the switch[NAME] TOO MANY REPEATS Too many repeat's in a block or routine [NAME] =ST NOT VALID The [NAME] is non-local RESULT OUT OF CONTEXT A result = [EXPR] statement appears in a routine other than a function or map routine NON-INTEGER CYCLE VARIABLE The controlled variable is not an integer
1. The following faults are monitored at run time. Normally they cause the program to be terminated but it may be restarted by a fault instruction. The relevant fault numbers appear in the tables below. For those numbers not appearing, reference should be made to the ABL Manual
DIV OVERFLOW Division by 0 or a non-standard number fault 1 EXP OVERFLOW Exponent overflow fault 2 SQRT -VE Sqrt of a negative argument fault 5 LOG -VE Log of a negative argument fault 6 INV TRIG FN OUT OF RANGE In inverse trig function e.g., fault 8 arcsin when the argument is not within range (-1,+1) INPUT ENDED Insufficient data so that a read fault 9 instruction effectively reads over the end of the data tape SPURIOUS CHARACTER IN DATA Spurious character (i.e. NOT fault 14 a decimal digit, point, sign, or α) appears in data. MORE THAN 3 SYMBOLS IN POSITION fault 15 A compound character formed from more than 3 superimposed characters has been encounted in textual data. REAL QUANTITY INSTEAD OF INTEGER IN DATA fault 16 FAULT IN COMPLEX DATA the complex data is not punched fault 17 according to the conventions of Section 8
2. Faults which indicate programming errors but which always cause the program to terminate
INPUT NOT DEFINED An input or output channel has been selected OUTPUT NOT DEFINED which is not mentioned in the Job Description ALL TESTS FAIL All conditions in a test instruction fail SWITCH VARIABLE NOT SET Refers to a multiway switch instruction ->[NAME]([EXPR]) where the value of [EXPR] is out of range or corresponds to a missing label. ARRAY DIMENSIONS NOT +VE Refers to a bound pair (L;U) where U-L+1≤0. NON-INTEGRAL CYCLE Refers to the check carried out immediately prior to the execution of a cycle CALLS FOR NON-EXISTENT ROUTINE Occurs when the routine and a specification are not at the same level, or the former is missing. DIMENSION FAULT Occurs when a matrix routine is called using parameters which are not matrices or are incompatible. ARRAY SUBSCRIPT OUT OF BOUNDS Occurs when compile array bound check is used and the subscripts are not within the right bounds.
3. Faults which can arise because of accessing array elements outside the bounds given in the declaration e.g. A(10,3) when A had been declared A(1:3,1:10). It the immediate cause is not obvious the compile array bound check should be used. There are a number of indications such as
SV OPERAND ILLEGAL BLOCK