<html xmlns:v="urn:schemas-microsoft-com:vml" 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="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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">The LLVM-as-libraries model means that “users” include downstream folks writing their own tooling that uses the APIs; not just people running the tooling LLVM provides that uses the APIs.  These changes are “externally visible” (as opposed
 to internal refactoring that can affect downstream modifications to the insides of LLVM).<o:p></o:p></p>
<p class="MsoNormal">--paulr<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> <b>On Behalf Of
</b>James Henderson via llvm-dev<br>
<b>Sent:</b> Thursday, June 24, 2021 8:24 AM<br>
<b>To:</b> Adam HARRIES <aharries@upmem.com><br>
<b>Cc:</b> llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] "[NFC]" Abuse<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">When I say "user" in this context, I mean someone or something who runs an LLVM executable (an LLVM executable being any that are part of the official LLVM project). Putting it another way, I would label a change as NFC if and only if all
 such executables given any input produced the exact same output as they did before the change.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">We simply cannot take account of downstream users when crafting these comments, if we're going to have any form of NFC tag at all. Even a supposedly trivial change has the potential to cause downstream merge conflicts or unexpected behaviour
 changes, if it just so happens to be in the wrong place. Imagine a function with a local variable, whose meaning is completely changed, but without impacting the end output of the function - if a downstream developer had a private patch using that local variable,
 their code might break, but it would seem to the upstream developer that this is an NFC patch, even under the rule of "API changes should not be marked as NFC". Worse, the code may not fail at build time, as the types could be compatible in some way that just
 causes a change in behaviour for that user.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">James<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, 24 Jun 2021 at 11:53, Adam HARRIES <<a href="mailto:aharries@upmem.com">aharries@upmem.com</a>> wrote:<o:p></o:p></p>
</div>
<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">> if a user of an LLVM tool (clang/lld/llvm-objdump/...) can see a difference in behaviour because of the change<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><br>
As a fairly new member of the llvm community, I'm interested in what people mean when they say "users".  For me, there are two distinct groups that I could consider "users" of the llvm-project: Day-to-day developers who use the compiled tools to build separate
 software, and compiler/tool developers who integrate or build upon llvm to build a piece of software. From reading through this thread it feels like these groups are sometimes being conflated, which leads to disagreements regarding whether or not a change
 will affect llvm "users". If we only consider group one to be "users", then clearly any change that does not alter the observable behaviours of the binaries can be considered a NFC. However, if we consider group two to be users as well, then the impacts of
 any change may be a functional change - and I would personally argue that this is especially true for API changes.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">As a member of group two, I have found that (as I think Luke has) changes which are considered non-functional can sometimes have surprising effects on our downstream components. While it is in no way the llvm project's responsibility to
 avoid breaking our code, any assistance in the form of comments or more precise tags goes a great way towards helping us to find and diagnose places where our assumptions are inconsistent with the state of the software.<br>
<br>
Cheers,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal"><b><span style="color:#666666">Adam Brouwers-Harries</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#666666">Compiler Engineer</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#666666"><a href="mailto:aharries@upmem.com" target="_blank">aharries@upmem.com</a></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</body>
</html>