What does 'inline' mean?
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Jun 13 18:24:18 UTC 2020
On 6/13/20 7:31 AM, Johannes Pfau wrote:
> Am Sat, 13 Jun 2020 01:33:34 -0700 schrieb Walter Bright:
>
>> On 6/12/2020 9:08 PM, Manu wrote:
>>> If the di file is mentioned on the command line to the compiler
>>>
>>> It's not, that's literally the point of a .di file.
>>
>> No, it isn't. A .di file is more of a convention than a feature. It's a
>> module and does not get special treatment by the compiler.
>>
>>> , yes (1)
>>> instance of it appears in the executable. Otherwise, (0) instances
>>> of it appear in the executable. There are never 2 or more instances
>>> in the executable.
>>>
>>> Exactly. And this is not a useful design.
>>
>> I hate to say it, but these sorts of replies are completely useless to
>> resolving your issues. You omitted the *why*.
>>
>> Why can't you put it on the command line?
>>
>
>
> a.di:
> void foo() {}
>
> b.d:
> import a;
>
> c.d:
> import a;
> void main() {foo();}
>
>
> dmd -c b.d
> dmd -c c.d
> dmd b.o c.o => undefined reference to `_D1a3fooFZv'
>
> dmd -c a.di b.d -ofb.o
> dmd -c a.di c.d -ofc.o
> dmd b.o c.o => undefined reference to `_D1a3fooFZv'
>
> mv a.di a.d
> dmd -c a.d b.d -ofb.o
> dmd -c a.d c.d -ofc.o
> dmd b.o c.o => multiple definition of `_D1a12__ModuleInfoZ'
>
> dmd -c a.d b.d -ofb.o -betterC
> dmd -c a.d c.d -ofc.o -betterC
> dmd b.o c.o => OK
>
> BTW: If you do dmd -c a.di you get no object file output. So .di files
> are treated differently
>
>
> I think it's interesting that DMD seems to emit some (all?) normal
> functions as weak. Not sure if LDC and GDC do the same thing. Would also
> be interesting to see how all this interacts with staic & shared
> libraries, though I'm optimistic that it just works.
>
>
>
>
> So basically all that's missing for Manu's inline case would be to emit
> pragma(inlne) functions from non-root modules. Probably a 1-line change.
Should that go in bugzilla?
More information about the Digitalmars-d
mailing list