xref: /llvm-project/flang/test/Lower/pass-null-for-class-arg.f90 (revision d0829fbdeda0a2faa8cf684e1396e579691bdfa2)
1*d0829fbdSjeanPerier! RUN: bbc -emit-fir %s -o - | FileCheck %s --check-prefix=FIR
2*d0829fbdSjeanPerier! RUN: bbc -emit-fir -hlfir %s -o - | FileCheck %s --check-prefix=HLFIR
3fdce1b7eSSlava Zakharin
4fdce1b7eSSlava Zakharinsubroutine test
5fdce1b7eSSlava Zakharin  interface
6fdce1b7eSSlava Zakharin     subroutine s1p(n)
7fdce1b7eSSlava Zakharin       type t
8fdce1b7eSSlava Zakharin          integer :: n
9fdce1b7eSSlava Zakharin       end type t
10fdce1b7eSSlava Zakharin       class(t), pointer :: n
11fdce1b7eSSlava Zakharin     end subroutine s1p
12fdce1b7eSSlava Zakharin  end interface
13fdce1b7eSSlava Zakharin  call s1p(null())
14fdce1b7eSSlava Zakharinend subroutine test
15fdce1b7eSSlava Zakharin! FIR-LABEL:   func.func @_QPtest() {
16fdce1b7eSSlava Zakharin! FIR:           %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>
17fdce1b7eSSlava Zakharin! FIR:           %[[VAL_1:.*]] = fir.zero_bits !fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>
18fdce1b7eSSlava Zakharin! FIR:           %[[VAL_2:.*]] = fir.embox %[[VAL_1]] : (!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>) -> !fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>
19fdce1b7eSSlava Zakharin! FIR:           fir.store %[[VAL_2]] to %[[VAL_0]] : !fir.ref<!fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>>
20fdce1b7eSSlava Zakharin! FIR:           fir.call @_QPs1p(%[[VAL_0]]) fastmath<contract> : (!fir.ref<!fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>>) -> ()
21fdce1b7eSSlava Zakharin! FIR:           return
22fdce1b7eSSlava Zakharin! FIR:         }
23fdce1b7eSSlava Zakharin
24fdce1b7eSSlava Zakharin! HLFIR-LABEL:   func.func @_QPtest() {
25fdce1b7eSSlava Zakharin! HLFIR:           %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>
26fdce1b7eSSlava Zakharin! HLFIR:           %[[VAL_1:.*]] = fir.zero_bits !fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>
27fdce1b7eSSlava Zakharin! HLFIR:           %[[VAL_2:.*]] = fir.embox %[[VAL_1]] : (!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>) -> !fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>
28fdce1b7eSSlava Zakharin! HLFIR:           fir.store %[[VAL_2]] to %[[VAL_0]] : !fir.ref<!fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>>
29fdce1b7eSSlava Zakharin! HLFIR:           fir.call @_QPs1p(%[[VAL_0]]) fastmath<contract> : (!fir.ref<!fir.class<!fir.ptr<!fir.type<_QFtestFs1pTt{n:i32}>>>>) -> ()
30fdce1b7eSSlava Zakharin! HLFIR:           return
31fdce1b7eSSlava Zakharin! HLFIR:         }
32