<div dir="auto">Yes, the question is with respect to the legacy flang.<div dir="auto"><br></div><div dir="auto">Best,</div><div dir="auto">Alexey</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed., Dec. 4, 2019, 8:45 p.m. Doerfert, Johannes, <<a href="mailto:jdoerfert@anl.gov">jdoerfert@anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div>
<div dir="auto" style="direction:ltr;margin:0;padding:0;font-family:sans-serif;font-size:11pt;color:black">
This concernes legacy flang, correct? (I ask because there are linkage issues with mlir as well)<br>
<br>
</div>
<div dir="auto" style="direction:ltr;margin:0;padding:0;font-family:sans-serif;font-size:11pt;color:black">
<span id="m_-6217752501863113635OutlookSignature">
<div dir="auto" style="direction:ltr;margin:0;padding:0;font-family:sans-serif;font-size:11pt;color:black">
--<br>
</div>
<div dir="auto" style="direction:ltr;margin:0;padding:0;font-family:sans-serif;font-size:11pt;color:black">
written from my phone</div>
</span><br>
</div>
<hr style="display:inline-block;width:98%">
<div id="m_-6217752501863113635divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> flang-dev <<a href="mailto:flang-dev-bounces@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev-bounces@lists.llvm.org</a>> on behalf of Stephen Scalpone via flang-dev <<a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a>><br>
<b>Sent:</b> Wednesday, December 4, 2019 8:40:54 PM<br>
<b>To:</b> Alexey Zhikhartsev <<a href="mailto:alexey.zhikhar@gmail.com" target="_blank" rel="noreferrer">alexey.zhikhar@gmail.com</a>>; <a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a> <<a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a>><br>
<b>Subject:</b> Re: [flang-dev] Fwd: Internal linkage for private subroutines</font>
<div> </div>
</div>

<div lang="EN-US" link="#0563C1" vlink="#954F72">
<div>
<p>This looks promising:</p>
<p> </p>
<p>ll_write.cpp:  fprintf(out, "define %s %s %s ", ll_get_linkage_string(function->linkage),</p>
<p> </p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p><b><span style="font-size:12.0pt;color:black">From: </span>
</b><span style="font-size:12.0pt;color:black">flang-dev <<a href="mailto:flang-dev-bounces@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev-bounces@lists.llvm.org</a>> on behalf of Alexey Zhikhartsev via flang-dev <<a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a>><br>
<b>Reply-To: </b>Alexey Zhikhartsev <<a href="mailto:alexey.zhikhar@gmail.com" target="_blank" rel="noreferrer">alexey.zhikhar@gmail.com</a>><br>
<b>Date: </b>Wednesday, December 4, 2019 at 4:49 PM<br>
<b>To: </b>"<a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a>" <<a href="mailto:flang-dev@lists.llvm.org" target="_blank" rel="noreferrer">flang-dev@lists.llvm.org</a>><br>
<b>Subject: </b>[flang-dev] Fwd: Internal linkage for private subroutines</span></p>
</div>
<div>
<p> </p>
</div>
<div>
<div>
<div>
<div>
<p>Hi all,</p>
<p> </p>
<p>In the code below, every function in module m is private by default, and only bar() is declared public:</p>
<p> </p>
<p><span style="font-family:"Courier New"">module m</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">implicit none</span></p>
<p><span style="font-family:"Courier New"">private</span></p>
<p><span style="font-family:"Courier New"">public :: bar</span></p>
<p><span style="font-family:"Courier New"">integer :: arr1(42)</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">contains</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  subroutine foo(a)</span></p>
<p><span style="font-family:"Courier New"">  integer :: a</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  arr1(1) = 2</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  end subroutine foo</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  subroutine bar(a)</span></p>
<p><span style="font-family:"Courier New"">  integer :: a</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  call foo(a)</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">  end subroutine bar</span></p>
<p><span style="font-family:"Courier New"">end module m</span></p>
<p> </p>
<p>However, in the resulting LLVM IR, no function is declared with an attribute “internal”:</p>
<p> </p>
<p><span style="font-family:"Courier New"">define void @m_foo_(i64* %a) !dbg !5 {</span></p>
<p><span style="font-family:"Courier New"">L.entry:</span></p>
<p><span style="font-family:"Courier New"">  br label %L.LB2_313</span></p>
<p><span style="font-family:"Courier New"">  </span>
</p>
<p><span style="font-family:"Courier New"">L.LB2_313:                                        ; preds = %L.entry</span></p>
<p><span style="font-family:"Courier New"">  %0 = bitcast %struct_m_4_* @_m_4_ to i32*, !dbg !10                              
</span></p>
<p><span style="font-family:"Courier New"">  store i32 2, i32* %0, align 4, !dbg !10, !tbaa !12</span></p>
<p><span style="font-family:"Courier New"">  ret void, !dbg !16</span></p>
<p><span style="font-family:"Courier New"">} </span>
</p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">define void @m_bar_(i64* %a) !dbg !17 {</span></p>
<p><span style="font-family:"Courier New"">L.entry:</span></p>
<p><span style="font-family:"Courier New"">  br label %L.LB3_314</span></p>
<p><span style="font-family:"Courier New""> </span></p>
<p><span style="font-family:"Courier New"">L.LB3_314:                                        ; preds = %L.entry</span></p>
<p><span style="font-family:"Courier New"">  call void @m_foo_(i64* %a), !dbg !18</span></p>
<p><span style="font-family:"Courier New"">  ret void, !dbg !20</span></p>
<p><span style="font-family:"Courier New"">}</span></p>
<p> </p>
<p>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.</p>
<p> </p>
<p>Alexey</p>
<table border="0" cellspacing="0" cellpadding="0" width="643" style="width:6.7in;border-collapse:collapse">
<tbody>
<tr style="height:28.5pt">
<td width="384" valign="top" style="width:4.0in;padding:0in 5.4pt 0in 5.4pt;height:28.5pt">
</td>
<td width="259" valign="top" style="width:2.7in;padding:0in 5.4pt 0in 5.4pt;height:28.5pt">
</td>
</tr>
</tbody>
</table>
<p> </p>
</div>
</div>
</div>
</div>
</div>
<div>
<hr>
</div>
<div>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. </div>
<div>
<hr>
</div>
</div>
</div>

</blockquote></div>