brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 59485c1 Raw
56 lines · plain
1! RUN: bbc -emit-fir -hlfir=false %s -o - | fir-opt --fir-polymorphic-op | FileCheck %s2module select_type_23  type p14    integer :: a5    integer :: b6  end type7 8  type, extends(p1) :: p29    integer :: c10  end type11 12  type, extends(p2) :: p313    integer :: d14  end type15 16contains17 18  subroutine select_type1(a)19    class(p1), intent(in) :: a20 21    select type (a)22    class is (p1)23      print*, 'class is p1'24    class is (p3)25      print*, 'class is p3'26    class default27      print*,'default'28    end select29  end subroutine30 31! CHECK-LABEL: func.func @_QMselect_type_2Pselect_type1(32! CHECK-SAME: %[[ARG0:.*]]: !fir.class<!fir.type<_QMselect_type_2Tp1{a:i32,b:i32}>> {fir.bindc_name = "a"}) {33! CHECK:      %[[TDESC_P3_ADDR:.*]] = fir.type_desc !fir.type<_QMselect_type_2Tp334! CHECK:      %[[TDESC_P3_CONV:.*]] = fir.convert %[[TDESC_P3_ADDR]] : (!fir.tdesc{{.*}}>) -> !fir.ref<none>35! CHECK:      %[[BOX_NONE:.*]] = fir.convert %[[ARG0]] : (!fir.class<!fir.type<_QMselect_type_2Tp1{a:i32,b:i32}>>) -> !fir.box<none>36! CHECK:      %[[CLASS_IS_CMP:.*]] = fir.call @_FortranAClassIs(%[[BOX_NONE]], %[[TDESC_P3_CONV]]) : (!fir.box<none>, !fir.ref<none>) -> i137! CHECK:      cf.cond_br %[[CLASS_IS_CMP]], ^[[CLASS_IS_P3_BLK:.*]], ^[[NOT_CLASS_IS_P3_BLK:.*]]38! CHECK:    ^bb[[NOT_CLASS_IS_P1:[0-9]]]:39! CHECK:      cf.br ^bb[[DEFAULT_BLK:[0-9]]]40! CHECK:    ^bb[[CLASS_IS_P1:[0-9]]]:41! CHECK:      cf.br ^bb[[END_SELECT_BLK:[0-9]]]42! CHECK:    ^[[NOT_CLASS_IS_P3_BLK]]:43! CHECK:      %[[TDESC_P1_ADDR:.*]] = fir.type_desc !fir.type<_QMselect_type_2Tp144! CHECK:      %[[TDESC_P1_CONV:.*]] = fir.convert %[[TDESC_P1_ADDR]] : (!fir.tdesc{{.*}}>) -> !fir.ref<none>45! CHECK:      %[[BOX_NONE:.*]] = fir.convert %[[ARG0]] : (!fir.class<!fir.type<_QMselect_type_2Tp1{a:i32,b:i32}>>) -> !fir.box<none>46! CHECK:      %[[CLASS_IS_CMP:.*]] = fir.call @_FortranAClassIs(%[[BOX_NONE]], %[[TDESC_P1_CONV]]) : (!fir.box<none>, !fir.ref<none>) -> i147! CHECK:      cf.cond_br %[[CLASS_IS_CMP]], ^bb[[CLASS_IS_P1]], ^bb[[NOT_CLASS_IS_P1]]48! CHECK:    ^[[CLASS_IS_P3_BLK]]:49! CHECK:      cf.br ^bb[[END_SELECT_BLK]]50! CHECK:    ^bb[[DEFAULT_BLK]]:51! CHECK:      cf.br ^bb[[END_SELECT_BLK]]52! CHECK:    ^bb[[END_SELECT_BLK]]:53! CHECK:      return54 55  end module56