blob: 39b33946b2ceee8452251d16fc958eb72d2ea037 [file] [edit]
! Test lowering of COPYPRIVATE with an unlimited polymorphic pointer.
! RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s
! Testcase from: https://github.com/llvm/llvm-project/issues/198770
! CHECK-LABEL: func.func private @_copy_ref_class_ptr_none(
! CHECK-SAME: %arg0: [[TYPE:!fir.ref<!fir.class<!fir.ptr<none>>>]],
! CHECK-SAME: %arg1: [[TYPE]]) attributes {llvm.linkage = #llvm.linkage<internal>} {
! CHECK: %[[DST:.*]]:2 = hlfir.declare %arg0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_copy_ref_class_ptr_none_dst"}
! CHECK: %[[SRC:.*]]:2 = hlfir.declare %arg1 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_copy_ref_class_ptr_none_src"}
! CHECK: %[[LD:.*]] = fir.load %[[SRC]]#0 : [[TYPE]]
! CHECK: fir.store %[[LD]] to %[[DST]]#0 : [[TYPE]]
! CHECK: return
! CHECK: }
! CHECK-LABEL: func.func @_QQmain()
! CHECK: omp.single copyprivate(%{{.*}} -> @_copy_ref_class_ptr_none : !fir.ref<!fir.class<!fir.ptr<none>>>) {
! CHECK: omp.terminator
! CHECK: }
class(*), pointer, save :: aa
!$omp threadprivate(aa)
!$omp single
!$omp end single copyprivate(aa)
end