brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 363d162 Raw
78 lines · plain
1! RUN: bbc -emit-fir -hlfir=false -I nowhere %s -o - | FileCheck %s2 3! Test allocatable return.4! Allocatable arrays must have default runtime lbounds after the return.5 6function test_alloc_return_scalar7  real, allocatable :: test_alloc_return_scalar8  allocate(test_alloc_return_scalar)9end function test_alloc_return_scalar10! CHECK-LABEL:   func.func @_QPtest_alloc_return_scalar() -> !fir.box<!fir.heap<f32>> {11! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<f32>> {bindc_name = "test_alloc_return_scalar", uniq_name = "_QFtest_alloc_return_scalarEtest_alloc_return_scalar"}12! CHECK:           %[[VAL_5:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.heap<f32>>>13! CHECK:           return %[[VAL_5]] : !fir.box<!fir.heap<f32>>14! CHECK:         }15 16function test_alloc_return_array17  real, allocatable :: test_alloc_return_array(:)18  allocate(test_alloc_return_array(7:8))19end function test_alloc_return_array20! CHECK-LABEL:   func.func @_QPtest_alloc_return_array() -> !fir.box<!fir.heap<!fir.array<?xf32>>> {21! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xf32>>> {bindc_name = "test_alloc_return_array", uniq_name = "_QFtest_alloc_return_arrayEtest_alloc_return_array"}22! CHECK:           %[[VAL_18:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>23! CHECK:           %[[VAL_19:.*]] = arith.constant 1 : index24! CHECK:           %[[VAL_20:.*]] = fir.shift %[[VAL_19]] : (index) -> !fir.shift<1>25! CHECK:           %[[VAL_21:.*]] = fir.rebox %[[VAL_18]](%[[VAL_20]]) : (!fir.box<!fir.heap<!fir.array<?xf32>>>, !fir.shift<1>) -> !fir.box<!fir.heap<!fir.array<?xf32>>>26! CHECK:           return %[[VAL_21]] : !fir.box<!fir.heap<!fir.array<?xf32>>>27! CHECK:         }28 29function test_alloc_return_char_scalar30  character(3), allocatable :: test_alloc_return_char_scalar31  allocate(test_alloc_return_char_scalar)32end function test_alloc_return_char_scalar33! CHECK-LABEL:   func.func @_QPtest_alloc_return_char_scalar() -> !fir.box<!fir.heap<!fir.char<1,3>>> {34! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.char<1,3>>> {bindc_name = "test_alloc_return_char_scalar", uniq_name = "_QFtest_alloc_return_char_scalarEtest_alloc_return_char_scalar"}35! CHECK:           %[[VAL_5:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.heap<!fir.char<1,3>>>>36! CHECK:           return %[[VAL_5]] : !fir.box<!fir.heap<!fir.char<1,3>>>37! CHECK:         }38 39function test_alloc_return_char_array40  character(3), allocatable :: test_alloc_return_char_array(:)41  allocate(test_alloc_return_char_array(7:8))42end function test_alloc_return_char_array43! CHECK-LABEL:   func.func @_QPtest_alloc_return_char_array() -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>> {44! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>> {bindc_name = "test_alloc_return_char_array", uniq_name = "_QFtest_alloc_return_char_arrayEtest_alloc_return_char_array"}45! CHECK:           %[[VAL_18:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>>46! CHECK:           %[[VAL_19:.*]] = arith.constant 1 : index47! CHECK:           %[[VAL_20:.*]] = fir.shift %[[VAL_19]] : (index) -> !fir.shift<1>48! CHECK:           %[[VAL_21:.*]] = fir.rebox %[[VAL_18]](%[[VAL_20]]) : (!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>, !fir.shift<1>) -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>49! CHECK:           return %[[VAL_21]] : !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>50! CHECK:         }51 52function test_alloc_return_poly_scalar53  type t54  end type t55  class(*), allocatable :: test_alloc_return_poly_scalar56  allocate(t :: test_alloc_return_poly_scalar)57end function test_alloc_return_poly_scalar58! CHECK-LABEL:   func.func @_QPtest_alloc_return_poly_scalar() -> !fir.class<!fir.heap<none>> {59! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.heap<none>> {bindc_name = "test_alloc_return_poly_scalar", uniq_name = "_QFtest_alloc_return_poly_scalarEtest_alloc_return_poly_scalar"}60! CHECK:           %[[VAL_16:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.class<!fir.heap<none>>>61! CHECK:           return %[[VAL_16]] : !fir.class<!fir.heap<none>>62! CHECK:         }63 64function test_alloc_return_poly_array65  type t66  end type t67  class(*), allocatable :: test_alloc_return_poly_array(:)68  allocate(t :: test_alloc_return_poly_array(7:8))69end function test_alloc_return_poly_array70! CHECK-LABEL:   func.func @_QPtest_alloc_return_poly_array() -> !fir.class<!fir.heap<!fir.array<?xnone>>> {71! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?xnone>>> {bindc_name = "test_alloc_return_poly_array", uniq_name = "_QFtest_alloc_return_poly_arrayEtest_alloc_return_poly_array"}72! CHECK:           %[[VAL_25:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>73! CHECK:           %[[VAL_26:.*]] = arith.constant 1 : index74! CHECK:           %[[VAL_27:.*]] = fir.shift %[[VAL_26]] : (index) -> !fir.shift<1>75! CHECK:           %[[VAL_28:.*]] = fir.rebox %[[VAL_25]](%[[VAL_27]]) : (!fir.class<!fir.heap<!fir.array<?xnone>>>, !fir.shift<1>) -> !fir.class<!fir.heap<!fir.array<?xnone>>>76! CHECK:           return %[[VAL_28]] : !fir.class<!fir.heap<!fir.array<?xnone>>>77! CHECK:         }78