brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 9a6a279 Raw
54 lines · plain
1! RUN: bbc -emit-hlfir %s -o - | FileCheck %s2 3module poly4  type p15    integer :: a6    integer :: b7  contains8    procedure, nopass :: proc1 => proc1_p19  end type10 11  type, extends(p1) :: p212    integer :: c13  contains14    procedure, nopass :: proc1 => proc1_p215  end type16 17contains18 19  subroutine proc1_p1()20    print*, 'call proc1_p1'21  end subroutine22 23  subroutine proc1_p2()24    print*, 'call proc1_p2'25  end subroutine26 27  subroutine test_nullify()28    class(p1), pointer :: c29 30    allocate(p2::c)31    call c%proc1()32 33    nullify(c) ! c dynamic type must be reset to p134 35    call c%proc1()36  end subroutine37end module38 39program test40  use poly41  call test_nullify()42end43 44! CHECK-LABEL: func.func @_QMpolyPtest_nullify()45! CHECK: %[[C_DESC:.*]] = fir.alloca !fir.class<!fir.ptr<!fir.type<_QMpolyTp1{a:i32,b:i32}>>> {bindc_name = "c", uniq_name = "_QMpolyFtest_nullifyEc"}46! CHECK: %[[C_DESC_DECL:.*]]:2 = hlfir.declare %[[C_DESC]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QMpolyFtest_nullifyEc"} : (!fir.ref<!fir.class<!fir.ptr<!fir.type<_QMpolyTp1{a:i32,b:i32}>>>>) -> (!fir.ref<!fir.class<!fir.ptr<!fir.type<_QMpolyTp1{a:i32,b:i32}>>>>, !fir.ref<!fir.class<!fir.ptr<!fir.type<_QMpolyTp1{a:i32,b:i32}>>>>)47! CHECK: %{{.*}} = fir.call @_FortranAPointerAllocate(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, i1, !fir.box<none>, !fir.ref<i8>, i32) -> i3248! CHECK: %[[DECLARED_TYPE_DESC:.*]] = fir.type_desc !fir.type<_QMpolyTp1{a:i32,b:i32}>49! CHECK: %[[C_DESC_CAST:.*]] = fir.convert %[[C_DESC_DECL]]#0 : (!fir.ref<!fir.class<!fir.ptr<!fir.type<_QMpolyTp1{a:i32,b:i32}>>>>) -> !fir.ref<!fir.box<none>>50! CHECK: %[[TYPE_DESC_CAST:.*]] = fir.convert %[[DECLARED_TYPE_DESC]] : (!fir.tdesc<!fir.type<_QMpolyTp1{a:i32,b:i32}>>) -> !fir.ref<none>51! CHECK: %[[RANK:.*]] = arith.constant 0 : i3252! CHECK: %[[CORANK:.*]] = arith.constant 0 : i3253! CHECK: fir.call @_FortranAPointerNullifyDerived(%[[C_DESC_CAST]], %[[TYPE_DESC_CAST]], %[[RANK]], %[[CORANK]]) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.ref<none>, i32, i32) -> ()54