Files
clang-p2996/flang/test/Semantics/OpenMP/reduction09.f90
Leandro Lupori 366eade911 [flang][OpenMP] Reland Fix copyprivate semantic checks (#95799) (#101009)
There are some cases in which variables used in OpenMP constructs
are predetermined as private. The semantic checks for copyprivate
were not handling those cases.

Besides that, shared symbols were not being properly represented
in some cases. When there was no previously declared private
(implicit) symbol, no new association symbols, representing
shared ones, were being created.

These symbols must always be inserted in constructs that may
privatize the original symbol: parallel, teams and task
generating constructs.

Fixes #87214 and #86907
2024-07-31 14:39:06 -03:00

77 lines
2.4 KiB
Fortran

! RUN: %python %S/../test_symbols.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.15.3.6 Reduction Clause Positive cases.
!DEF: /omp_reduction MainProgram
program omp_reduction
!DEF: /omp_reduction/i ObjectEntity INTEGER(4)
integer i
!DEF: /omp_reduction/k ObjectEntity INTEGER(4)
integer :: k = 10
!DEF: /omp_reduction/a ObjectEntity INTEGER(4)
integer a(10)
!DEF: /omp_reduction/b ObjectEntity INTEGER(4)
integer b(10,10,10)
!$omp parallel shared(k)
!$omp do reduction(+:k)
!DEF: /omp_reduction/OtherConstruct1/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct1/OtherConstruct1/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
!$omp end parallel
!$omp parallel do reduction(+:a(10))
!DEF: /omp_reduction/OtherConstruct2/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct2/k HostAssoc INTEGER(4)
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:a(1:10:1))
!DEF: /omp_reduction/OtherConstruct3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct3/k HostAssoc INTEGER(4)
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:b(1:10:1,1:5,2))
!DEF: /omp_reduction/OtherConstruct4/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct4/k HostAssoc INTEGER(4)
k = k+1
end do
!$omp end parallel do
!$omp parallel do reduction(+:b(1:10:1,1:5,2:5:1))
!DEF: /omp_reduction/OtherConstruct5/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct5/k HostAssoc INTEGER(4)
k = k+1
end do
!$omp end parallel do
!$omp parallel private(i)
!$omp do reduction(+:k) reduction(+:j)
!DEF: /omp_reduction/OtherConstruct6/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct6/OtherConstruct1/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
!$omp end parallel
!$omp do reduction(+:k) reduction(*:j) reduction(+:l)
!DEF: /omp_reduction/OtherConstruct7/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
do i=1,10
!DEF: /omp_reduction/OtherConstruct7/k (OmpReduction) HostAssoc INTEGER(4)
k = k+1
end do
!$omp end do
end program omp_reduction