gcc/libgomp/testsuite/libgomp.fortran/target-map-1.f90
Tobias Burnus 174e79bf73 [Fortran, OpenMP] Fix allocatable-components check (PR67311)
gcc/fortran/ChangeLog:

	PR fortran/67311
	* trans-openmp.c (gfc_has_alloc_comps): Return false also for
	pointers to arrays.

libgomp/ChangeLog:

	PR fortran/67311
	* testsuite/libgomp.fortran/target-map-1.f90: New test.
2020-07-14 12:55:53 +02:00

42 lines
1.2 KiB
Fortran

! PR fortran/67311
implicit none
TYPE myType
integer :: A
TYPE(myType), DIMENSION(:), POINTER :: x
TYPE(myType), DIMENSION(:), contiguous, POINTER :: y
integer :: B
END TYPE myType
call openmp_sub
contains
subroutine openmp_sub
type(myType) :: argument
!$OMP PARALLEL DEFAULT(NONE) PRIVATE(argument)
argument%a = 5
argument%b = 7
call foo(argument)
if (.not.associated(argument%x) .or. size(argument%x) /= 2) stop 2
if (argument%a /= 8 .or. argument%b /= 9 &
.or. any(argument%x(:)%a /= [2, 3]) &
.or. any(argument%x(:)%b /= [9, 1])) stop 3
if (.not.associated(argument%y) .or. size(argument%y) /= 3) stop 4
if (any(argument%y(:)%a /= [11, 22, 33]) &
.or. any(argument%y(:)%b /= [44, 55, 66])) stop 5
deallocate (argument%x, argument%y)
!$OMP END PARALLEL
end subroutine openmp_sub
subroutine foo(x)
type(myType), intent(inout) :: x
!$omp declare target
if (x%a /= 5 .or. x%b /= 7) stop 1
x%a = 8; x%b = 9
allocate (x%x(2))
x%x(:)%a = [2, 3]
x%x(:)%b = [9, 1]
allocate (x%y(3))
x%y(:)%a = [11, 22, 33]
x%y(:)%b = [44, 55, 66]
end subroutine
end