On Saturday, 28 September 2024 at 12:20:43 UTC, realhet wrote:
Hi,
I have some statements in my mind about --allinst, but I'm not
sure they are correct or not.
1. Normally the compiler analyzes the full code with all the
modules, and it only compiles code for template things that are
used in the given code.
2. It is not needed for compiling the code with a single
compiler instance, but is required for projects that are
compiled in parallel by using multiple compiler instances.
Please someone tell me that these statements are valid or I
know this wrong. (These are just my speculations, feelings, I
didn't find documentation on this.)
Speaking of speculation... "-allinst" disable an internal system
of speculation that is: "this instance is already emitted so dont
do it again".
Over the years it has appeared that the speculation does not
always work as it should.
The classic symptom of that is when people encounter linker
errors related to missing symbols. "-allinst" is the number one
workaround. When activated, it's likely that things get emitted
more than once, but at least, speculation bugs are gone.
You may ask "but then there should be other linker errors about
double definition ?". No, those syms has to be emitted as "weak"
symbols, so the linker ignore duplicated definitions.