blob: 07f60b98b0941fb2fddc4a6655a1f86233cdf1ad [file] [log] [blame]
! Test fir.host_sym attribute to retain link between internal
! and host procedure in FIR even when BIND(C) is involved.
! RUN: bbc -emit-hlfir -o - %s | FileCheck %s
! RUN: bbc -emit-hlfir -o - %s | fir-opt -external-name-interop -o - |FileCheck %s --check-prefix=AFTER_RENAME_PASS
subroutine foo() bind(c, name="some_c_name")
call bar()
contains
subroutine bar()
end subroutine
end subroutine
! CHECK: func.func @some_c_name()
! CHECK: func.func private @_QFfooPbar() attributes {fir.host_symbol = @some_c_name, llvm.linkage = #llvm.linkage<internal>}
! AFTER_RENAME_PASS: func.func @some_c_name()
! AFTER_RENAME_PASS: func.func private @_QFfooPbar() attributes {fir.host_symbol = @some_c_name, llvm.linkage = #llvm.linkage<internal>}
subroutine notbindc()
call bar()
contains
subroutine bar()
end subroutine
end subroutine
! CHECK: func.func @_QPnotbindc()
! CHECK: func.func private @_QFnotbindcPbar() attributes {fir.host_symbol = @_QPnotbindc, llvm.linkage = #llvm.linkage<internal>}
! AFTER_RENAME_PASS: func.func @notbindc_() attributes {fir.internal_name = "_QPnotbindc"}
! AFTER_RENAME_PASS: func.func private @_QFnotbindcPbar() attributes {fir.host_symbol = @notbindc_, llvm.linkage = #llvm.linkage<internal>}
! Main program
call bar()
contains
subroutine bar()
end subroutine
end
! CHECK: func.func @_QQmain()
! CHECK: func.func private @_QFPbar() attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>}
! AFTER_RENAME_PASS: func.func @_QQmain()
! AFTER_RENAME_PASS: func.func private @_QFPbar() attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>}