According to OpenMP 5.0 spec document, the following semantic restrictions have been dealt with in this patch. 1. [sections construct] Orphaned section directives are prohibited. That is, the section directives must appear within the sections construct and must not be encountered elsewhere in the sections region. Semantic checks for the following are not necessary, since use of orphaned section construct (i.e. without an enclosing sections directive) throws parser errors and control flow never reaches the semantic checking phase. Added a test case for the same. 2. [sections construct] Must be a structured block Added test case and made changes to branching logic 3. [simd construct] Must be a structured block / A program that branches in or out of a function with declare simd is non conforming 4. Fixed !$omp do's handling of unlabeled CYCLEs Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D108904
41 lines
1.0 KiB
Fortran
41 lines
1.0 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang -fopenmp
|
|
! OpenMP Version 5.0
|
|
! 2.9.3.1 simd Construct
|
|
! - A program that branches into or out of a simd region is non-conforming.
|
|
! - The associated loops must be structured blocks
|
|
|
|
program omp_simd
|
|
integer i, j
|
|
|
|
!$omp simd
|
|
do i = 1, 10
|
|
do j = 1, 10
|
|
print *, "omp simd"
|
|
!ERROR: invalid branch leaving an OpenMP structured block
|
|
goto 10
|
|
end do
|
|
if (i .EQ. 5) THEN
|
|
call function1()
|
|
else if (i .EQ. 7) THEN
|
|
open (10, file="random-file-name.txt", err=20)
|
|
20 print *, "Error message doesn't branch out of the loop's structured block"
|
|
else
|
|
!ERROR: invalid branch leaving an OpenMP structured block
|
|
open (10, file="random-file-name.txt", err=10)
|
|
end if
|
|
end do
|
|
!$omp end simd
|
|
10 stop
|
|
|
|
end program omp_simd
|
|
|
|
subroutine function1()
|
|
integer i, option
|
|
option = 1
|
|
!$omp simd
|
|
do i = 1, 10
|
|
print *, "CORRECT SIMD LOOP"
|
|
end do
|
|
!$omp end simd
|
|
end subroutine function1
|