! Test lowering of COPYPRIVATE with procedure pointers. ! RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s !CHICK-SAME: %arg0: [[TYPE:!fir.ref i32>>>]], !CHECK-LABEL: func.func private @_copy_ref_boxproc_i32_args( !CHECK-SAME: %arg0: [[TYPE:!fir.ref i32>>]], !CHECK-SAME: %arg1: [[TYPE]]) !CHECK: %[[DST:.*]]:2 = hlfir.declare %arg0 {{.*}} : ([[TYPE]]) -> ([[TYPE]], [[TYPE]]) !CHECK: %[[SRC:.*]]:2 = hlfir.declare %arg1 {{.*}} : ([[TYPE]]) -> ([[TYPE]], [[TYPE]]) !CHECK: %[[TEMP:.*]] = fir.load %[[SRC]]#0 : [[TYPE]] !CHECK: fir.store %[[TEMP]] to %[[DST]]#0 : [[TYPE]] !CHECK: return !CHECK-LABEL: func @_QPtest_proc_ptr !CHECK: omp.parallel !CHECK: omp.single copyprivate(%{{.*}}#0 -> @_copy_ref_boxproc_i32_args : !fir.ref i32>>) subroutine test_proc_ptr() interface function sub1() bind(c) result(ret) use, intrinsic :: iso_c_binding integer(c_int) :: ret end function sub1 end interface procedure(sub1), pointer, save, bind(c) :: ffunptr !$omp threadprivate(ffunptr) !$omp parallel ffunptr => sub1 !$omp single ffunptr => sub1 !$omp end single copyprivate(ffunptr) if (ffunptr() /= 1) print *, 'err' !$omp end parallel end subroutine function sub1() bind(c) result(ret) use, intrinsic::iso_c_binding integer(c_int) :: ret ret = 1 end function sub1