Files
clang-p2996/flang/test/Semantics/label05.f90
Peter Klausler ee9c917048 [flang] Fix bogus branch target error on END SELECT
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
2022-06-13 11:42:55 -07:00

61 lines
1.3 KiB
Fortran

! RUN: not %flang_fc1 -fdebug-unparse-with-symbols %s 2>&1 | FileCheck %s
! CHECK: Label '50' was not found
! CHECK: warning: Label '55' is in a construct that should not be used as a branch target here
! CHECK: Label '70' is not a branch target
! CHECK: Control flow use of '70'
! CHECK: error: Label '80' is in a construct that prevents its use as a branch target here
! CHECK: error: Label '90' is in a construct that prevents its use as a branch target here
! CHECK: error: Label '91' is in a construct that prevents its use as a branch target here
! CHECK: error: Label '92' is in a construct that prevents its use as a branch target here
subroutine sub00(a,b,n,m)
real a(n,m)
real b(n,m)
if (n .ne. m) then
goto 50
end if
6 n = m
end subroutine sub00
subroutine sub01(a,b,n,m)
real a(n,m)
real b(n,m)
if (n .ne. m) then
goto 55
else
55 continue
end if
60 n = m
end subroutine sub01
subroutine sub02(a,b,n,m)
real a(n,m)
real b(n,m)
if (n .ne. m) then
goto 70
else
return
end if
70 FORMAT (1x,i6)
end subroutine sub02
subroutine sub03(a,n)
real a(n)
forall (j=1:n)
80 a(n) = j
end forall
go to 80
end subroutine sub03
subroutine sub04(a,n)
real a(n)
where (a > 0)
90 a = 1
elsewhere (a < 0)
91 a = 2
elsewhere
92 a = 3
end where
if (n - 3) 90, 91, 92
end subroutine sub04