! RUN: %python %S/../test_errors.py %s %flang -fopenmp ! OpenMP version 5.0.0 ! 2.13.3 parallel sections Construct ! The restrictions for the parallel construct and the sections construct apply program OmpConstructSections01 use omp_lib integer :: section_count = 0 integer, parameter :: NT = 4 integer :: i, array(10) type my_type integer :: array(10) end type my_type type(my_type) :: my_var print *, 'section_count', section_count do i = 1, 10 array(i) = i end do !ERROR: A variable that is part of another variable (as an array or structure element) cannot appear in a PRIVATE or SHARED clause !$omp parallel sections shared(array(i)) !$omp end parallel sections !ERROR: A variable that is part of another variable (as an array or structure element) cannot appear in a PRIVATE or SHARED clause !$omp parallel sections shared(my_var%array) !$omp end parallel sections !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 !ERROR: A variable that is part of another variable (as an array or structure element) cannot appear in a PRIVATE or SHARED clause !$omp parallel sections private(my_var%array) !$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 parallel sections 10 print *, 'Jump from section' !ERROR: A variable that is part of another variable (as an array or structure element) cannot appear in a PRIVATE or SHARED clause !$omp parallel sections private(array(i)) !$omp section 40 print *, 'Error in opening file' !$omp end parallel sections end program OmpConstructSections01 function returnFromSections() !$omp parallel sections !$omp section !ERROR: RETURN statement is not allowed in a PARALLEL SECTIONS construct RETURN !$omp end parallel 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 parallel sections !$omp section IF (i .EQ. 5) THEN !ERROR: CYCLE to construct outside of PARALLEL SECTIONS construct is not allowed CYCLE END IF !$omp end parallel sections print *, "Statement within loop but outside section contruct" end do !$omp parallel sections !$omp section do i = 1, 10 CYCLE end do !$omp end parallel sections !$omp parallel 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 parallel sections loop_2: do i = 1, 10 !$omp parallel sections !$omp section IF (i .EQ. 5) THEN !ERROR: CYCLE to construct 'loop_2' outside of PARALLEL SECTIONS construct is not allowed CYCLE loop_2 END IF !$omp end parallel sections end do loop_2 end subroutine continueWithinSections subroutine breakWithinSections() loop_3: do i = 1, 10 !$omp parallel sections !$omp section IF (i .EQ. 5) THEN !ERROR: EXIT to construct 'loop_3' outside of PARALLEL SECTIONS construct is not allowed EXIT loop_3 END IF !$omp end parallel sections end do loop_3 loop_4: do i = 1, 10 !$omp parallel sections !$omp section IF (i .EQ. 5) THEN !ERROR: EXIT to construct outside of PARALLEL SECTIONS construct is not allowed EXIT END IF !$omp end parallel sections end do loop_4 !$omp parallel sections !$omp section do i = 1, 10 IF (i .EQ. 5) THEN EXIT END IF end do !$omp end parallel sections !$omp parallel 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 parallel sections end subroutine breakWithinSections