Use the ABORTform of the CALLstatement to terminate the program when an exception occurs. In the following example, the log is taken of a negative number. The ABORTclause causes the program immediately after the exception is detected and to issue a procedure traceback:
Example 14
PROGRAM main
REAL :: x, y, z
!The next statement enables traps for
!and specifies the action to take for divide by zero.
!ON REAL DIV 0 ABORT
x= 10.0
y = 0.0
z = x / y PRINT *, y END PROGRAM main
Here is the command line and the output from a sample run:
$ f90 abort.f90 $ a.out
PROGRAM ABORTED : IEEE divide by zero
PROCEDURE TRACEBACK:
( 0) 0x0000248c _start + 0x6c [./a.out]
The program would have the same result if you were to comment out the ON statement and compile with the +fp_exceptionoption.
Ignoring errorsYou can use the ONstatement to ignore an exception by specifying the IGNOREkeyword. The following paragraphs discuss an example program,ignore.f90, that uses the ONstatement to ignore an invalid operation. The following program illustrates this.
Example 15
PROGRAM main REAL :: x, y, z
!The following ON statement enables traps for
!exceptions and causes the program to ignore an invalid
!operation exception. ON REAL ILLEGAL IGNORE
!The next two statements pass a negative argument to the LOG
!intrinsic, resulting in an invalid operation. This
!exception is ignored, as specified by the ON statement. x =
PRINT *, y
!The next three statements attempt to divide by zero. The
!trap for this exception is enabled by the previous
!ON statement but no action is specified. Therefore,
!the program will abort execution.
x= 9.0 y = 0 z = x/y
PRINT *, z
END PROGRAM main
As defined by the IEEE standard, a
ON REAL INVALID IGNORE
causes the program to ignore this exception and continue execution.
Actions specified by ON 83