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