[Issue 20248] New: Module constructors in executable called twice, in

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Sep 27 09:38:47 UTC 2019


https://issues.dlang.org/show_bug.cgi?id=20248

          Issue ID: 20248
           Summary: Module constructors in executable called twice, in
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P1
         Component: druntime
          Assignee: nobody at puremagic.com
          Reporter: john.loughran.colvin at gmail.com

% cat modcon.d
import modcon2;
void main()
{
        import core.runtime : Runtime;
        import core.sys.posix.dlfcn;
        import std.stdio;
        writeln("HI");
        assert(Runtime.loadLibrary("./libmodcon2.so"));
}
% cat modcon2.d
__gshared int a;
shared static this() { foo(); }
void foo()
{
        import core.stdc.stdio;
        printf("%p ", &a);
        printf("%p\n", &foo);
}

% dmd -shared modcon2.d -of=libmodcon2.so
% dmd -defaultlib=libphobos2.so modcon.d modcon2.d
% ./modcon
0x7f920f3a2140 0x7f920f39f930
HI
0x7f920f3a2140 0x7f920f39f930


As you can see from the printed pointers, the module constructor from the
executable is called twice - once on process start and once on loading the
shared library - and the module constructor from the shared library is never
called.

Module constructors are normally designed to be called only once, so this
causes some havok

--


More information about the Digitalmars-d-bugs mailing list