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