[Issue 24056] New: const uninitialized data at module scope is not in TLS
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Jul 25 18:31:08 UTC 2023
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24056
          Issue ID: 24056
           Summary: const uninitialized data at module scope is not in TLS
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: spec, wrong-code
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: schveiguy at gmail.com
module-level data that is declared const is stored in the global segment, yet
is editable from normal static constructors.
Either const data should be put into thread local storage, or they should not
be editable from static ctors that aren't shared:
```d
import std.stdio;
import std.concurrency;
import core.thread;
const void * x;
static this()
{
    auto addr = cast(void*) Thread.getThis();
    writeln("this thread is ", addr);
    x = addr;
}
void main()
{
    writeln("Before spawning thread: ", x);
    static void foo(Tid owner) {
        send(owner, 1);
    }
    auto tid = spawn(&foo, thisTid);
    receive((int x) {});
    writeln("After spawning thread: ", x);
}
```
Output:
this thread is 55788EDF3628
Before spawning thread: 55788EDF3628
this thread is 7FC99E404000
After spawning thread: 7FC99E404000
--
    
    
More information about the Digitalmars-d-bugs
mailing list