! { 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