! RUN: bbc %s -emit-fir -hlfir=false -o - | FileCheck %s ! Test trivial goto statement subroutine sub1() goto 1 1 stop end subroutine ! CHECK-LABEL: sub1 ! CHECK: cf.br ^[[BB1:.*]] ! CHECK: ^[[BB1]]: ! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) {{.*}}: (i32, i1, i1) -> none ! CHECK: } ! Test multiple goto statements subroutine sub2() goto 1 1 goto 2 2 goto 3 3 stop end subroutine ! CHECK-LABEL: sub2 ! CHECK: cf.br ^[[BB1:.*]] ! CHECK: ^[[BB1]]: ! CHECK: cf.br ^[[BB2:.*]] ! CHECK: ^[[BB2]]: ! CHECK: cf.br ^[[BB3:.*]] ! CHECK: ^[[BB3]]: ! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) {{.*}}: (i32, i1, i1) -> none ! CHECK: } ! Test goto which branches to a previous label subroutine sub3() pause 1 goto 3 2 stop 3 goto 2 end subroutine ! CHECK: sub3 ! CHECK: {{.*}} fir.call @_FortranAPauseStatement() {{.*}}: () -> none ! CHECK: cf.br ^[[BB2:.*]] ! CHECK: ^[[BB1:.*]]: // ! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) {{.*}}: (i32, i1, i1) -> none ! CHECK: ^[[BB2]]: ! CHECK: cf.br ^[[BB1]] ! CHECK: } ! Test removal of blocks (pauses) which are not reachable subroutine sub4() pause 1 goto 2 pause 2 goto 3 pause 3 goto 1 pause end subroutine ! CHECK-LABEL: sub4 ! CHECK: {{.*}} fir.call @_FortranAPauseStatement() {{.*}}: () -> none ! CHECK-NEXT: cf.br ^[[BB1:.*]] ! CHECK-NEXT: ^[[BB1]]: ! CHECK-NEXT: cf.br ^[[BB2:.*]] ! CHECK-NEXT: ^[[BB2]]: ! CHECK-NEXT: cf.br ^[[BB3:.*]] ! CHECK-NEXT: ^[[BB3]]: ! CHECK-NEXT: cf.br ^[[BB1]] ! CHECK-NEXT: }