1! RUN: bbc %s -emit-fir -o - | FileCheck %s 2 3! Test trivial goto statement 4subroutine sub1() 5goto 1 61 stop 7end subroutine 8! CHECK-LABEL: sub1 9! CHECK: cf.br ^[[BB1:.*]] 10! CHECK: ^[[BB1]]: 11! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) : (i32, i1, i1) -> none 12! CHECK: } 13 14! Test multiple goto statements 15subroutine sub2() 16goto 1 171 goto 2 182 goto 3 193 stop 20end subroutine 21! CHECK-LABEL: sub2 22! CHECK: cf.br ^[[BB1:.*]] 23! CHECK: ^[[BB1]]: 24! CHECK: cf.br ^[[BB2:.*]] 25! CHECK: ^[[BB2]]: 26! CHECK: cf.br ^[[BB3:.*]] 27! CHECK: ^[[BB3]]: 28! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) : (i32, i1, i1) -> none 29! CHECK: } 30 31! Test goto which branches to a previous label 32subroutine sub3() 33pause 341 goto 3 352 stop 363 goto 2 37end subroutine 38! CHECK: sub3 39! CHECK: {{.*}} fir.call @_FortranAPauseStatement() : () -> none 40! CHECK: cf.br ^[[BB2:.*]] 41! CHECK: ^[[BB1:.*]]: // 42! CHECK: {{.*}} fir.call @_FortranAStopStatement({{.*}}, {{.*}}, {{.*}}) : (i32, i1, i1) -> none 43! CHECK: ^[[BB2]]: 44! CHECK: cf.br ^[[BB1]] 45! CHECK: } 46 47! Test removal of blocks (pauses) which are not reachable 48subroutine sub4() 49pause 501 goto 2 51pause 522 goto 3 53pause 543 goto 1 55pause 56end subroutine 57! CHECK-LABEL: sub4 58! CHECK: {{.*}} fir.call @_FortranAPauseStatement() : () -> none 59! CHECK-NEXT: cf.br ^[[BB1:.*]] 60! CHECK-NEXT: ^[[BB1]]: 61! CHECK-NEXT: cf.br ^[[BB2:.*]] 62! CHECK-NEXT: ^[[BB2]]: 63! CHECK-NEXT: cf.br ^[[BB3:.*]] 64! CHECK-NEXT: ^[[BB3]]: 65! CHECK-NEXT: cf.br ^[[BB1]] 66! CHECK-NEXT: } 67