<div dir="ltr"><div dir="ltr">On Sat, Jun 13, 2020 at 1:39 PM Manu <<a href="mailto:turkeyman@gmail.com">turkeyman@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sat, Jun 13, 2020 at 1:30 PM Andrei Alexandrescu via Digitalmars-d <<a href="mailto:digitalmars-d@puremagic.com" target="_blank">digitalmars-d@puremagic.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 6/12/20 8:54 PM, Walter Bright wrote:<br>
> On 6/12/2020 5:17 PM, Andrei Alexandrescu wrote:<br>
>> Not sure about that part - if linkage was static by means of using the <br>
>> "static" keyword, multiple definitions may not be merged. (I may be <br>
>> wrong, please correct me.) Consider:<br>
>><br>
>> static inline int fun() {<br>
>>      static int x;<br>
>>      return ++x;<br>
>> }<br>
>><br>
>> In C++, each translation unit containing a definition of fun() will <br>
>> have a distinct address for x. I don't see how the bodies of those <br>
>> functions can be merged.<br>
> <br>
> They are not merged in D, for the simple reason that ModuleA.fun() and <br>
> ModuleB.fun() will have different (mangled) names presented to the linker.<br>
<br>
For D the question is if they are merged if the function is defined in a <br>
.di file and imported in two other modules.<br></blockquote><div><br></div><div>They are not 'merged', they just don't exist.</div><div>The problem I've repeated many times for D is that it doesn't emit the function ANYWHERE, and as such, you get a "undefined symbol" error. This is different than C++ where you would have gotten a "multiply defined symbol" error, but it's exactly the same problem for the exact same reason. It just manifests differently because C++ has .h files which naturally duplicates the code into each CU and D doesn't.</div></div></div></blockquote><div><br></div><div>And where I say "it's the same problem", perhaps it's better to say "it's the same issue"; about the requirement to emit inline code to each referencing CU, and what the linkonce link flags are designed to address.</div></div></div>