blob: 1861b3907bcf07abf951eb3e9ba4afab51ae8341 [file] [log] [blame] [edit]
! Regression test for crash compiling privatizer for a pointer to an array.
! The crash was because the fir.embox was not given a shape but it needs one.
!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
! ALLOCATABLE case (2nd subroutine)
!CHECK-LABEL: omp.private {type = firstprivate}
!CHECK-SAME: @{{.*}} : !fir.box<!fir.heap<!fir.array<?x!fir.type<{{.*}}>>>> init {
!CHECK: if %{{.*}} {
!CHECK: %[[SHAPE:.*]] = fir.shape
!CHECK: %[[BOX:.*]] = fir.embox %{{.*}}(%[[SHAPE]])
!CHECK: } else {
! POINTER case (1st subroutine)
!CHECK-LABEL: omp.private {type = firstprivate}
!CHECK-SAME: @{{.*}} : !fir.box<!fir.ptr<!fir.array<?x!fir.type<{{.*}}>>>> init {
!CHECK: %[[SHAPE:.*]] = fir.shape
!CHECK: %[[ADDR:.*]] = fir.zero_bits
!CHECK: %[[BOX:.*]] = fir.embox %[[ADDR]](%[[SHAPE]])
subroutine pointer_to_array_derived
type t
integer :: i
end type
type(t), pointer :: a(:)
allocate(a(1))
a(1)%i = 2
!$omp parallel firstprivate(a)
if (a(1)%i/=2) stop 2
!$omp end parallel
end subroutine
subroutine allocatable_array_derived
type t
integer :: i
end type
type(t), allocatable :: a(:)
allocate(a(1))
a(1)%i = 2
!$omp parallel firstprivate(a)
if (a(1)%i/=2) stop 2
!$omp end parallel
end subroutine