! 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