mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:26:48 +00:00

The scope model used for branch target checking treats a label on an END SELECT statement as if it were in the previous CASE block. This makes it illegal to GO TO that label from within any earlier CASE block in that statement. Fix by treating the CASE blocks as nested scopes within the scope of the SELECT construct. Also, add a "warning:" tag to related warning messages. Differential Revision: https://reviews.llvm.org/D127425
25 lines
734 B
Fortran
25 lines
734 B
Fortran
! RUN: not %flang_fc1 -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s
|
|
! CHECK: warning: Label '10' is in a construct that should not be used as a branch target here
|
|
! CHECK: Label '20' was not found
|
|
! CHECK: Label '30' is not a branch target
|
|
! CHECK: Control flow use of '30'
|
|
! CHECK: warning: Label '40' is in a construct that should not be used as a branch target here
|
|
! CHECK: warning: Label '50' is in a construct that should not be used as a branch target here
|
|
|
|
subroutine sub00(n)
|
|
GOTO (10,20,30) n
|
|
if (n .eq. 1) then
|
|
10 print *, "xyz"
|
|
end if
|
|
30 FORMAT (1x,i6)
|
|
end subroutine sub00
|
|
|
|
subroutine sub01(n)
|
|
real n
|
|
GOTO (40,50,60) n
|
|
if (n .eq. 1) then
|
|
40 print *, "xyz"
|
|
50 end if
|
|
60 continue
|
|
end subroutine sub01
|