What does -vtls compiler flag does and ...
Vladimir Panteleev
thecybershadow.lists at gmail.com
Wed Oct 3 22:06:39 UTC 2018
On Wednesday, 3 October 2018 at 20:41:15 UTC, welkam wrote:
> This flag blocks compilation and I want to just remove it but
> since I dont know what it is used for I hesitate. If my
> attempts were to be successful in compiling dmd with other
> compilers I would make pull request but now I have more
> question than answers. What this flag does? Why some files
> compiled with it and other dont? Why it is added to all
> compilation targets unconditionally?
A long time ago, D global and static variables worked just like
in C/C++, and went in the data segment (i.e. there was one per
program). At one point, this was changed, so that they would go
into TLS by default (i.e. one per thread), thus making a lot of
code that was previously not thread-safe, magically thread-safe.
To allow developers who wanted to make sure that their code
compiled to exactly the same behavior as before to update their
programs easily, this flag was added, so that they could find all
the places in their program where the new behavior will take into
effect.
Today, it is still useful for finding globals in programs that
shouldn't have any. I don't know why it's used in DMD, but that
might certainly be the reason, considering there is a long-term
ongoing effort to make DMD usable as a library.
The flag otherwise should have no effect on the result of the
compilation (i.e. produced object files / binaries), so you can
remove it locally. You will probably need to investigate why the
compiler you're using doesn't support it (perhaps it's there
under another name) - the code for its implementation should
still be there, as all of DMD/LDC/GDC use the same frontend.
More information about the Digitalmars-d-learn
mailing list