Execution Control Overview

Execution of a program consists of the asynchronous execution of the program in a fixed number of one or more of its images. Each image has its own execution environment, including floating-point status, a set of data objects, input/output units, and procedure pointers.

A program normally executes statements in the order in which they are written. Executable control constructs and statements, and procedure invocations, modify this normal execution by transferring control to another statement in the program, or by selecting blocks (groups) of constructs and statements for execution or repetition.

Procedures may be invoked by the CALL statement (subroutine), during expression evaluation (function), or as part of data definition and handling (user-defined operators and FINAL procedures). There are many ways to define a procedure: for example, external, internal, contained, type-bound, defined operator or assignment, and module. All procedures have one entry point; procedures usually return to their caller.

The control constructs ASSOCIATE, CASE, DO, IF, and SELECT TYPE contain blocks and can be named. The name must be a unique identifier in the scoping unit, and must appear on the initial line and terminal line of the construct. On the initial line, the name is separated from the statement keyword by a colon (:).

A block can contain any executable Fortran statement except an END statement. You can transfer control out of a block, but you cannot transfer control into another block.

DO loops cannot partially overlap blocks. The DO statement and its terminal statement must appear together in a statement block.

The following are execution control statements or constructs:

  • ASSOCIATE construct

    Creates a temporary association between a named entity and a variable or the value of an expression. The association lasts for the duration of the block.

  • CALL statement

    Transfers control to a subroutine subprogram.

  • CASE construct

    Conditionally executes one block of constructs or statements depending on the value of a scalar expression in a SELECT CASE statement.

  • CONTINUE statement

    Primarily used to terminate a labeled DO construct when the construct would otherwise end improperly with either a GO TO, arithmetic IF, or other prohibited control statement.

  • CRITICAL construct

    Limits execution of a block to one image at a time.

  • DO construct

    Controls the repeated execution of a block of statements or constructs. The following statements are used in DO constructs:

    • DO CONCURRENT statement

      Specifies that there are no data dependencies between the iterations of a DO loop.

    • DO WHILE statement

      Executes the range of a DO construct while a specified condition remains true.

    • CYCLE statement

      Interrupts the current execution cycle of the innermost (or named) DO construct.

    • EXIT statement

      Terminates execution of a DO construct

  • END statement

    Marks the end of a program unit.

  • IF construct and IF statement

    The IF construct conditionally executes one block of statements or constructs. The IF statement conditionally executes one statement. The decision to transfer control or to execute the statement or block is based on the evaluation of a logical expression within the IF statement or construct.

  • PAUSE statement

    Temporarily suspends program execution until the user or system resumes execution.

    These statements are deleted features in the Fortran Standard. Intel® Fortran fully supports features deleted in the Fortran Standard.

  • RETURN statement

    Transfers control from a subprogram to the calling program unit.

  • SELECT TYPE construct

    Selects for execution at most one of its constituent blocks based on the dynamic type of an expression specified.

  • STOP and ERROR STOP statement

    The STOP statement terminates program execution before the end of the program unit. The ERROR STOP statement initiates error termination of execution.

For more complete information about compiler optimizations, see our Optimization Notice.