blob: f8efb027fd0d2fe8445c4d745e12394d74576282 [file] [edit]
! Test instantiation of procedure pointer hidden behind
! generic interface host associated from a module.
! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
module m_proc_pointer_hidden_by_generic
procedure (proc2),pointer :: p
interface p
procedure proc1, p
end interface
contains
subroutine proc1(i)
integer :: i
end subroutine
subroutine proc2(x)
real :: x
end subroutine
subroutine test()
p=>proc2
end subroutine
end
! CHECK-LABEL: func.func @_QMm_proc_pointer_hidden_by_genericPtest(
! CHECK: %[[DUMMY_SCOPE_0:.*]] = fir.dummy_scope : !fir.dscope
! CHECK: %[[ADDRESS_OF_0:.*]] = fir.address_of(@_QMm_proc_pointer_hidden_by_genericEp) : !fir.ref<!fir.boxproc<(!fir.ref<f32>) -> ()>>
! CHECK: %[[DECLARE_0:.*]]:2 = hlfir.declare %[[ADDRESS_OF_0]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QMm_proc_pointer_hidden_by_genericEp"} : (!fir.ref<!fir.boxproc<(!fir.ref<f32>) -> ()>>) -> (!fir.ref<!fir.boxproc<(!fir.ref<f32>) -> ()>>, !fir.ref<!fir.boxproc<(!fir.ref<f32>) -> ()>>)
! CHECK: %[[ADDRESS_OF_1:.*]] = fir.address_of(@_QMm_proc_pointer_hidden_by_genericPproc2) : (!fir.ref<f32>) -> ()
! CHECK: %[[EMBOXPROC_0:.*]] = fir.emboxproc %[[ADDRESS_OF_1]] : ((!fir.ref<f32>) -> ()) -> !fir.boxproc<() -> ()>
! CHECK: %[[CONVERT_0:.*]] = fir.convert %[[EMBOXPROC_0]] : (!fir.boxproc<() -> ()>) -> !fir.boxproc<(!fir.ref<f32>) -> ()>
! CHECK: fir.store %[[CONVERT_0]] to %[[DECLARE_0]]#0 : !fir.ref<!fir.boxproc<(!fir.ref<f32>) -> ()>>
! CHECK: return
! CHECK: }