gdc or ldc for faster programs?

Johan Engelen j at j.nl
Thu Jan 27 18:12:18 UTC 2022


On Thursday, 27 January 2022 at 16:46:59 UTC, Ali Çehreli wrote:
>
> What I know is that weak symbols can be overridden by strong 
> symbols during linking. Which means, if a function body is 
> inlined which also has a weak symbol, some part of the program 
> may be using the inlined definition and some other parts may be 
> using the overridden definition. Thanks to separate 
> compilation, they need not match hence the violation of the 
> one-definition rule (ODR).

But the language requires ODR, so we can emit templates as 
weak_odr, telling the optimizer and linker that the symbols 
should be merged _and_ that ODR can be assumed to hold (i.e. 
inlining is OK).
The onus of honouring ODR is on the user - not the compiler - 
because we allow the user to do separate compilation. Some more 
detailed explanation and example:
https://stackoverflow.com/questions/44335046/how-does-the-linker-handle-identical-template-instantiations-across-translation/44346057

-Johan



More information about the Digitalmars-d-learn mailing list