[flang-dev] Fwd: Internal linkage for private subroutines

Doerfert, Johannes via flang-dev flang-dev at lists.llvm.org
Wed Dec 4 17:44:58 PST 2019


This concernes legacy flang, correct? (I ask because there are linkage issues with mlir as well)

--
written from my phone

________________________________
From: flang-dev <flang-dev-bounces at lists.llvm.org> on behalf of Stephen Scalpone via flang-dev <flang-dev at lists.llvm.org>
Sent: Wednesday, December 4, 2019 8:40:54 PM
To: Alexey Zhikhartsev <alexey.zhikhar at gmail.com>; flang-dev at lists.llvm.org <flang-dev at lists.llvm.org>
Subject: Re: [flang-dev] Fwd: Internal linkage for private subroutines


This looks promising:



ll_write.cpp:  fprintf(out, "define %s %s %s ", ll_get_linkage_string(function->linkage),



From: flang-dev <flang-dev-bounces at lists.llvm.org> on behalf of Alexey Zhikhartsev via flang-dev <flang-dev at lists.llvm.org>
Reply-To: Alexey Zhikhartsev <alexey.zhikhar at gmail.com>
Date: Wednesday, December 4, 2019 at 4:49 PM
To: "flang-dev at lists.llvm.org" <flang-dev at lists.llvm.org>
Subject: [flang-dev] Fwd: Internal linkage for private subroutines



Hi all,



In the code below, every function in module m is private by default, and only bar() is declared public:



module m



implicit none

private

public :: bar

integer :: arr1(42)



contains



  subroutine foo(a)

  integer :: a



  arr1(1) = 2



  end subroutine foo



  subroutine bar(a)

  integer :: a



  call foo(a)



  end subroutine bar

end module m



However, in the resulting LLVM IR, no function is declared with an attribute “internal”:



define void @m_foo_(i64* %a) !dbg !5 {

L.entry:

  br label %L.LB2_313



L.LB2_313:                                        ; preds = %L.entry

  %0 = bitcast %struct_m_4_* @_m_4_ to i32*, !dbg !10

  store i32 2, i32* %0, align 4, !dbg !10, !tbaa !12

  ret void, !dbg !16

}



define void @m_bar_(i64* %a) !dbg !17 {

L.entry:

  br label %L.LB3_314



L.LB3_314:                                        ; preds = %L.entry

  call void @m_foo_(i64* %a), !dbg !18

  ret void, !dbg !20

}



Am I missing something? I tried to find where it might be implemented in flang by grepping the flang codebase for SC_STATIC but there’s just too many places. Any pointers would be much appreciated.



Alexey



________________________________
This email message is for the sole use of the intended recipient(s) and may contain confidential information.  Any unauthorized review, use, disclosure or distribution is prohibited.  If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.
________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/flang-dev/attachments/20191205/4b4c56ef/attachment.html>


More information about the flang-dev mailing list