xref: /llvm-project/flang/test/Lower/Intrinsics/storage_size-2.f90 (revision 0ccef6a723cbfe3d72b85d34963badb37a6a9a53)
1! Test storage_size with characters
2! RUN: bbc -emit-hlfir %s -o - | FileCheck %s
3
4! check-label: func.func @_QPtest_storage_size
5subroutine test_storage_size(n)
6  interface
7    function return_char(l)
8      integer :: l
9      character(l) :: return_char
10    end function
11  end interface
12  integer n
13  print*, storage_size(return_char(n))
14! CHECK: %[[val_16:.*]] = fir.call @_QPreturn_char(%[[res_addr:[^,]*]], %[[res_len:[^,]*]], {{.*}})
15! CHECK: %[[res:.*]]:2 = hlfir.declare %[[res_addr]] typeparams %[[res_len]]
16! CHECK: %[[false:.*]] = arith.constant false
17! CHECK: %[[expr:.*]] = hlfir.as_expr %[[res]]#0 move %[[false]] : (!fir.boxchar<1>, i1) -> !hlfir.expr<!fir.char<1,?>>
18! CHECK: %[[assoc:.*]]:3 = hlfir.associate %[[expr]] typeparams %[[res_len]] {adapt.valuebyref} : (!hlfir.expr<!fir.char<1,?>>, index) -> (!fir.boxchar<1>, !fir.ref<!fir.char<1,?>>, i1)
19! CHECK: %[[val_18:.*]] = fir.embox %[[assoc]]#1 typeparams %[[res_len]] : (!fir.ref<!fir.char<1,?>>, index) -> !fir.box<!fir.char<1,?>>
20! CHECK: %[[val_19:.*]] = fir.box_elesize %[[val_18]] : (!fir.box<!fir.char<1,?>>) -> i32
21! CHECK: %[[val_20:.*]] = arith.constant 8 : i32
22! CHECK: %[[val_21:.*]] = arith.muli %[[val_19]], %[[val_20]] : i32
23! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %[[val_21]])
24end subroutine
25
26function return_char(l)
27  integer :: l
28  character(l) :: return_char
29end function
30
31  call test_storage_size(42)
32  print *, 42*8
33end
34