Files
clang-p2996/flang/test/Semantics/OpenMP/sections02.f90
Michael Klemm fb5fd2d82f [flang][OpenMP] Compile proper omp_lib.mod from the openmp/src/include sources (#80874)
This PR changes the build system to use use the sources for the module
`omp_lib` and the `omp_lib.h` include file from the `openmp` runtime
project and not from a separate copy of these files. This will greatly
reduce potential for inconsistencies when adding features to the OpenMP
runtime implementation.

When the OpenMP subproject is not configured, this PR also disables the
corresponding LIT tests with a "REQUIRES" directive at the beginning of
the OpenMP test files.

---------

Co-authored-by: Valentin Clement (バレンタイン クレメン) <clementval@gmail.com>
2024-03-20 13:47:26 +01:00

140 lines
3.6 KiB
Fortran

! REQUIRES: openmp_runtime
! RUN: %python %S/../test_errors.py %s %flang -fopenmp
! OpenMP version 5.0.0
! 2.8.1 sections construct
! The code enclosed in a sections construct must be a structured block.
program OmpConstructSections01
use omp_lib
integer :: section_count = 0
integer, parameter :: NT = 4
print *, 'section_count', section_count
!ERROR: invalid branch into an OpenMP structured block
!ERROR: invalid branch into an OpenMP structured block
!ERROR: invalid branch into an OpenMP structured block
if (NT) 20, 30, 40
!ERROR: invalid branch into an OpenMP structured block
goto 20
!$omp sections
!$omp section
print *, "This is a single statement structured block"
!$omp section
open (10, file="random-file-name.txt", err=30)
!ERROR: invalid branch into an OpenMP structured block
!ERROR: invalid branch leaving an OpenMP structured block
open (10, file="random-file-name.txt", err=40)
!$omp section
section_count = section_count + 1
20 print *, 'Entering into section'
call calledFromWithinSection()
print *, 'section_count', section_count
!$omp section
section_count = section_count + 1
print *, 'section_count', section_count
!ERROR: invalid branch leaving an OpenMP structured block
goto 10
!$omp section
30 print *, "Error in opening file"
!$omp end sections
10 print *, 'Jump from section'
!$omp sections
!$omp section
40 print *, 'Error in opening file'
!$omp end sections
end program OmpConstructSections01
function returnFromSections()
!$omp sections
!$omp section
!ERROR: RETURN statement is not allowed in a SECTIONS construct
RETURN
!$omp end sections
end function
subroutine calledFromWithinSection()
print *, "I am called from within a 'section' structured block"
return
end subroutine calledFromWithinSection
subroutine continueWithinSections()
integer i
do i = 1, 10
print *, "Statement within loop but outside section construct"
!$omp sections
!$omp section
IF (i .EQ. 5) THEN
!ERROR: CYCLE to construct outside of SECTIONS construct is not allowed
CYCLE
END IF
!$omp end sections
print *, "Statement within loop but outside section contruct"
end do
!$omp sections
!$omp section
do i = 1, 10
CYCLE
end do
!$omp end sections
!$omp sections
!$omp section
loop_1: do i = 1, 10
IF (i .EQ. 5) THEN
CYCLE loop_1
END IF
end do loop_1
!$omp end sections
loop_2: do i = 1, 10
!$omp sections
!$omp section
IF (i .EQ. 5) THEN
!ERROR: CYCLE to construct 'loop_2' outside of SECTIONS construct is not allowed
CYCLE loop_2
END IF
!$omp end sections
end do loop_2
end subroutine continueWithinSections
subroutine breakWithinSections()
loop_3: do i = 1, 10
!$omp sections
!$omp section
IF (i .EQ. 5) THEN
!ERROR: EXIT to construct 'loop_3' outside of SECTIONS construct is not allowed
EXIT loop_3
END IF
!$omp end sections
end do loop_3
loop_4: do i = 1, 10
!$omp sections
!$omp section
IF (i .EQ. 5) THEN
!ERROR: EXIT to construct outside of SECTIONS construct is not allowed
EXIT
END IF
!$omp end sections
end do loop_4
!$omp sections
!$omp section
do i = 1, 10
IF (i .EQ. 5) THEN
EXIT
END IF
end do
!$omp end sections
!$omp sections
!$omp section
loop_5: do i = 1, 10
IF (i .EQ. 5) THEN
EXIT loop_5
END IF
end do loop_5
!$omp end sections
end subroutine breakWithinSections