blob: 6fa735afc6dfa282875b50478b3951791aa88920 [file] [log] [blame]
! { dg-do run }
! { dg-options "-std=f2008 " }
! PR fortran/44602
! Check for correct behavior of EXIT / CYCLE combined with non-loop
! constructs at run-time.
! Contributed by Daniel Kraft, d@domob.eu.
PROGRAM main
IMPLICIT NONE
TYPE :: t
END TYPE t
INTEGER :: i
CLASS(t), ALLOCATABLE :: var
! EXIT and CYCLE without names always refer to innermost *loop*. This
! however is checked at run-time already in exit_1.f08.
! Basic EXITs from different non-loop constructs.
i = 2
myif: IF (i == 1) THEN
STOP 1
EXIT myif
ELSE IF (i == 2) THEN
EXIT myif
STOP 2
ELSE
STOP 3
EXIT myif
END IF myif
mysel: SELECT CASE (i)
CASE (1)
STOP 4
EXIT mysel
CASE (2)
EXIT mysel
STOP 5
CASE DEFAULT
STOP 6
EXIT mysel
END SELECT mysel
mycharsel: SELECT CASE ("foobar")
CASE ("abc")
STOP 7
EXIT mycharsel
CASE ("xyz")
STOP 8
EXIT mycharsel
CASE DEFAULT
EXIT mycharsel
STOP 9
END SELECT mycharsel
myblock: BLOCK
EXIT myblock
STOP 10
END BLOCK myblock
myassoc: ASSOCIATE (x => 5 + 2)
EXIT myassoc
STOP 11
END ASSOCIATE myassoc
ALLOCATE (t :: var)
mytypesel: SELECT TYPE (var)
TYPE IS (t)
EXIT mytypesel
STOP 12
CLASS DEFAULT
STOP 13
EXIT mytypesel
END SELECT mytypesel
! Check EXIT with nested constructs.
outer: BLOCK
inner: IF (.TRUE.) THEN
EXIT outer
STOP 14
END IF inner
STOP 15
END BLOCK outer
END PROGRAM main