This scenario describes the behavior of an application that contains
a Fortran and
a C routine.
In this scenario, a C main
routine invokes a Fortran subroutine.
An exception occurs in the Fortran subroutine.
Refer to Figure 1 throughout the following
discussion.
Figure 1. Stack contents when the exception
occurs
The actions taken follow the three Language Environment condition
handling steps: enablement, condition, and termination imminent.
- If an I/O error is detected on a Fortran I/O statement
that contains an ERR or IOSTAT specifier, Fortran semantics
take precedence. The exception is not signaled to the Language Environment condition
handler.
- In the enablement step, Fortran treats
all exceptions as conditions. Processing continues with the condition
handling step.
- There is no user-written condition handler on the Fortran stack
frame (because CEEHDLR cannot be called from a Fortran routine),
and the condition is percolated.
- If a user-written condition handler has been registered for the
condition (as specified in the global error table) using CEEHDLR on
the C stack
frame, it is given control. If it issues a resume, with or without
moving the resume cursor, the condition handling step ends. Processing
continues in the routine to which the resume cursor points.
In
this example, no user-written condition handler is registered for
the condition, so the condition is percolated.
- If a C signal handler has been registered for the condition, it
is given control. If it moves the resume cursor or issues a call to longjmp(),
the condition handling step ends. Processing resumes in the routine
to which the resume cursor points.
In this example, no C signal
handler is registered for the condition, so the condition is percolated.
- If the condition is of severity 0 or 1, Language Environment default
actions take place, as described in Table 1.
- If the condition is of severity 2 or above, Language Environment default
action is to promote the condition to T_I_U (Termination Imminent
due to an Unhandled condition) and redrive the stack. Condition handling
now enters the termination imminent step.
- If on the second pass of the stack no condition handler moves
the resume cursor and issues a resume, Language Environment terminates
the thread.