It's surprising that __gshared members are implicitly static. Example: http://forum.dlang.org/thread/dkqsqyatiwbwyrojpfxb@forum.dlang.org __gshared members without an explicit `static` should be deprecated with an appropriate message and later disallowed. (This would also be an excellent candidate for Brian's dfix.)
after some thinking i started to believe that we should make exactly the opposite: warn about 'static __gshared' members. '__gshared' implies "one instance", so 'static __gshared' is excessive and meaningless.
Created attachment 1413 [details] warns on "static __gshared" variables something like this, heh
Created attachment 1414 [details] druntime code cleanup
Created attachment 1415 [details] phobos code cleanup
`static __gshared` is currently indeed redundant, but my point is that this isn't obvious. I would expect it to work analogously to a shared member: You can have static and non-static ones of those. As I see it, __gshared merely means "make it shared, but don't complain about unsynchronized access". Therefore I can't agree that it implies "one instance". It's IMO better to make it explicit.
specs clearly says: > __gshared may also be applied to member variables and local variables. > In these cases, __gshared is equivalent to static, except that the > variable is shared by all threads rather than being thread local. http://dlang.org/attribute.html#gshared so "static __gshared" is a tautology, and i believe that it should be error instead of warning. but error'ing it can break some code, so let's warn for now.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18877 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB