40 lines · plain
1! Test fir.host_sym attribute to retain link between internal2! and host procedure in FIR even when BIND(C) is involved.3 4! RUN: bbc -emit-hlfir -o - %s | FileCheck %s5! RUN: bbc -emit-hlfir -o - %s | fir-opt -external-name-interop -o - |FileCheck %s --check-prefix=AFTER_RENAME_PASS6 7subroutine foo() bind(c, name="some_c_name")8 call bar()9contains10 subroutine bar()11 end subroutine12end subroutine13! CHECK: func.func @some_c_name()14! CHECK: func.func private @_QFfooPbar() attributes {fir.host_symbol = @some_c_name, llvm.linkage = #llvm.linkage<internal>}15! AFTER_RENAME_PASS: func.func @some_c_name()16! AFTER_RENAME_PASS: func.func private @_QFfooPbar() attributes {fir.host_symbol = @some_c_name, llvm.linkage = #llvm.linkage<internal>}17 18subroutine notbindc()19 call bar()20contains21 subroutine bar()22 end subroutine23end subroutine24! CHECK: func.func @_QPnotbindc()25! CHECK: func.func private @_QFnotbindcPbar() attributes {fir.host_symbol = @_QPnotbindc, llvm.linkage = #llvm.linkage<internal>}26! AFTER_RENAME_PASS: func.func @notbindc_() attributes {fir.internal_name = "_QPnotbindc"}27! AFTER_RENAME_PASS: func.func private @_QFnotbindcPbar() attributes {fir.host_symbol = @notbindc_, llvm.linkage = #llvm.linkage<internal>}28 29 30! Main program31call bar()32contains33 subroutine bar()34 end subroutine35end36! CHECK: func.func @_QQmain()37! CHECK: func.func private @_QFPbar() attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>}38! AFTER_RENAME_PASS: func.func @_QQmain()39! AFTER_RENAME_PASS: func.func private @_QFPbar() attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>}40