[Issue 22367] The __ModuleInfo member spuriously linked for modules compiler with -betterC

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Dec 1 03:32:57 UTC 2022


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

--- Comment #13 from Walter Bright <bugzilla at digitalmars.com> ---
In this case, ModuleInfo is how the D runtime runs static constructors.
Programs compiled with betterC are meant to link only with the C runtime
library, which knows nothing about ModuleInfo.

The problem here is writing a library that is compiled with betterC, and meant
to be linked with either a betterC program or a D program.

Simply turning off ModuleInfo generation means the betterC's library does not
run its static constructors.

Since a D program that is importing betterC modules does not know if they are
betterC modules or not, it is the betterC modules' responsibility to choose how
to do its own static construction.

I.e. a betterC module should use the following to run its static construction:

    pragma(crt_constructor) extern (C) void doMyStaticConstruction() { ... }

If a betterC is to be only linked with a D main, it should do:

    static this() { ... }

It should not do both, as then the static constructions will get run twice if
it is linked with a D main.

The change to fix this bug report, then, is for betterC modules to generate a
ModuleInfo if it has a `static this` constructor. And to add these instructions
to the documentation.

The DLL export stuff is an orthogonal problem.

--


More information about the Digitalmars-d-bugs mailing list