llvm-project/flang/test/Lower/assigned-goto.f90
V Donaldson fd922e6ab0 [flang] Nonconformant assigned gotos
Modify code generation for assigned gotos to generate a runtime error
for most cases that violate F90 Clause 8.2.4, rather than treating a
nonconformant GOTO as a nop. For example, generate a runtime error for
a GOTO that attempts to branch to a label for a FORMAT statement.
Relax the requirement that an assigned GOTO with a label list must
branch to a label in the list, and instead allow a branch to any valid
assigned GOTO target in scope.
2023-04-05 14:53:23 -07:00

41 lines
949 B
Fortran

! RUN: bbc -emit-fir -o - %s | FileCheck %s
! CHECK-LABEL: func @_QPnolist
subroutine nolist
integer L, V
11 V = 1
! CHECK: fir.store %c31{{.*}} to %{{.}}
assign 31 to L
! CHECK: fir.select %{{.}} : i32 [31, ^bb{{.}}, unit, ^bb{{.}}]
! CHECK: fir.call @_FortranAReportFatalUserError
goto L ! no list
21 V = 2
go to 41
31 V = 3
41 print*, 3, V
end
! CHECK-LABEL: func @_QPlist
subroutine list
integer L, L1, V
66 format("Nonsense")
assign 66 to L
assign 42 to L1
! CHECK: fir.store %c22{{.*}} to %{{.}}
assign 22 to L
12 V = 100
! CHECK: fir.store %c32{{.*}} to %{{.}}
assign 32 to L
! CHECK: fir.select %{{.}} : i32 [22, ^bb{{.}}, 32, ^bb{{.}}, unit, ^bb{{.}}]
! CHECK: fir.call @_FortranAReportFatalUserError
goto L (42, 32, 22, 32, 32) ! duplicate labels are allowed
22 V = 200
go to 42
32 V = 300
42 print*, 300, V
end
call nolist
call list
end