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