<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">(switching list from llvm-commits to llvm-dev, which seems more appropriate here)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">llvm-commits <llvm-commits-bounces@lists.llvm.org> on behalf of Rui Ueyama via llvm-commits <llvm-commits@lists.llvm.org><br>
<b>Reply-To: </b>Rui Ueyama <ruiu@google.com><br>
<b>Date: </b>Friday, October 13, 2017 at 4:22 PM<br>
<b>To: </b>Rafael Avila de Espindola <rafael.espindola@gmail.com><br>
<b>Cc: </b>llvm-commits <llvm-commits@lists.llvm.org><br>
<b>Subject: </b>Re: Reducing confusion around isUndefined()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">I think I'm not too excited about adding more predicates or inheritance. Lazy symbols are useful only when we are adding files to the symbol table. After that, there's no use of them. So maybe we can just visit all symbols at some point
 after reading all files but before writeResult to nuke all Lazy symbols (by replacing local undefined symbol or something), so that we don't have to think about it after that point.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Fri, Oct 13, 2017 at 3:27 PM, Rafael Avila de Espindola <<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">In lld we have three types of symbols that are easily confused:<br>
undefined, shared and lazy.<br>
<br>
I just finished auditing the uses of isUndefined, and most were<br>
incorrect.<br>
<br>
The most common issue was that the code intended to check if the symbol<br>
will be undefined on the final symbol table. The actual predicate for<br>
that is isInCurrentDSO().<br>
<br>
In some other cases the intention was to check if we had a definition<br>
already, in which case the code should check also for lazy symbols<br>
too. We don't currently have a predicate for isUndefined() || isLazy().<br>
<br>
Some ideas to try to make this less error prone.<br>
<br>
* Add a isNotDefined() predicate for isUndefined() ||<br>
  isLazy(). Unfortunately the name would be confusing.<br>
<br>
* Have Lazy inherit from undefined. Very few places want to check just<br>
  for undefined, so they can use kind() directly and isUndefined() would<br>
  also return true for lazy symbols.<br>
<br>
* Rename isUndefined() to isUndefinedOnInput() to make it clear it is<br>
  not about the output symbol table.<br>
<br>
I am not too excited about any of these. Anyone has another suggestion<br>
on how to make this more intuitive?<br>
<br>
Cheers,<br>
Rafael<o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>