
BIND(C) ABI need care in the TargetRewrite pass. currently, we are not able to accurately identify fun.func that are BIND(C) in FIR (the fir.bindc_name is used in other contexts, like for program names). This patch adds the fir.proc_attrs to func.func just like it was done for calls recently. This replace the previous named attribute for PURE/ELEMENTAL/RECURSIVE (note that RECURSIVE is changed to NON_RECURSIVE, which brings more data since RECURSIVE is the default for procedures that do not have explicit RECURSIVE/NON_RECUSRIVE attributes).
37 lines
923 B
Fortran
37 lines
923 B
Fortran
! RUN: bbc -emit-hlfir %s -o - | FileCheck %s
|
|
|
|
pure subroutine sub1()
|
|
end
|
|
|
|
! CHECK: func.func @_QPsub1() attributes {fir.proc_attrs = #fir.proc_attrs<pure>}
|
|
|
|
elemental subroutine sub2()
|
|
end
|
|
|
|
! CHECK: func.func @_QPsub2() attributes {fir.proc_attrs = #fir.proc_attrs<elemental, pure>}
|
|
|
|
non_recursive subroutine sub3()
|
|
end
|
|
|
|
! CHECK: func.func @_QPsub3() attributes {fir.proc_attrs = #fir.proc_attrs<non_recursive>}
|
|
|
|
impure elemental subroutine sub4()
|
|
end
|
|
|
|
! CHECK: func.func @_QPsub4() attributes {fir.proc_attrs = #fir.proc_attrs<elemental>}
|
|
|
|
pure function fct1()
|
|
end
|
|
|
|
! CHECK: func.func @_QPfct1() -> f32 attributes {fir.proc_attrs = #fir.proc_attrs<pure>}
|
|
|
|
elemental function fct2()
|
|
end
|
|
|
|
! CHECK: func.func @_QPfct2() -> f32 attributes {fir.proc_attrs = #fir.proc_attrs<elemental, pure>}
|
|
|
|
non_recursive function fct3()
|
|
end
|
|
|
|
! CHECK: func.func @_QPfct3() -> f32 attributes {fir.proc_attrs = #fir.proc_attrs<non_recursive>}
|