Developer Guide and Reference

ID 767251
Date 10/31/2024
Public
Document Table of Contents

Branch Statements Overview

Branching affects the normal execution sequence by transferring control to a labeled statement in the same scoping unit. The transfer statement is called the branch statement, while the statement to which the transfer is made is called the branch target statement.

A branch target statement inside a construct can only be branched to from within the same block of the construct that contains the branch target statement.

A branch within a CRITICAL construct must not have a branch target that is outside the construct. A branch to the END CRITICAL statement is permitted from within the construct.

Any executable statement can be a branch target statement, except for the following:

  • CASE statement

  • ELSE statement

  • ELSE IF statement

  • END FORALL statement

  • END WHERE statement

  • RANK case statement

  • A statement in a FORALL or WHERE construct

  • A type-guard statement (that is, TYPE IS, CLASS IS, or CLASS DEFAULT)

Certain restrictions apply to the following statements:

Statement

Restriction

DO terminal statement

The branch must be taken from within its nonblock DO construct1.

END ASSOCIATE

The branch must be taken from within its ASSOCIATE construct.

END BLOCK

The branch must be taken from within its BLOCK construct.

END CRITICAL

The branch must be taken from within its CRITICAL construct.

END DO

The branch must be taken from within its block DO construct.

END IF

The branch should be taken from within its IF construct2.

END SELECT

The branch must be taken from within its SELECT CASE, SELECT RANK, or SELECT TYPE construct.

END TEAM

The branch must be taken from within the CHANGE TEAM construct.

1If the terminal statement is shared by more than one nonblock DO construct, the branch can only be taken from within the innermost DO construct.

2You can branch to an END IF statement from outside the IF construct; this is a deleted feature in the Fortran Standard. Intel® Fortran fully supports features deleted in the Fortran Standard.

The following are branch statements:

  • GOTO - Unconditional statement

    Transfers control to the same branch target statement every time it executes.

  • GOTO - COMPUTED statement

    Transfers control to one of a set of labeled branch target statements based on the value of an expression.

  • CALL statement with an alternate return specified

    Transfers control to one of the alternate return branch target statements based on the value of the expression on the RETURN statement executed in the called subroutine to return control to the caller.

  • An input/output statement with an END=, EOR=, or ERR= specifier

    Transfers control to the specified labeled branch target statement if an end of file condition (END=), an end of record condition (EOR=), or an error condition (ERR=) occurs during execution of the input/output statement.

  • ASSIGN and assigned GO TO statements

    Assigns a label to an integer variable. Subsequently, this variable can be used as a branch target statement by an assigned GO TO statement or as a format specifier in a formatted input/output statement.

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

  • IF - Arithmetic statement

    Conditionally transfers control to one of three statements, based on the value of an arithmetic expression.