https://issues.dlang.org/show_bug.cgi?id=17707
Issue ID: 17707
Summary: unimported modules in libraries do not have their
module constructors run
Product: D
Version: D2
Hardware: x86_64
OS: All
Status: NEW
Severity: major
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
First with object files:
% ls
app.d foo.d
% cat app.d
void main() { import core.stdc.stdio; puts("and from here"); }
% cat foo.d
static this() { import core.stdc.stdio; puts("hello"); }
% dmd -c app.d foo.d
% ls
app.d app.o foo.d foo.o
% gcc app.o foo.o -lphobos2
% ./a.out
hello
and from here
Everything looks fine there
% ar rcs foo.a foo.o
% gcc app.o foo.a -lphobos2
% ./a.out
and from here
the module constructor from foo.d has gone missing!
test on macOS and linux, with many different permutations. Splitting the object
file back out of the library makes it work again, so no information is lost.
On macOS it was easy to discover that the result of getsectbynamefromheader_64
for __DATA __minfodata is missing an entry for foo in the library case, but not
in the object case.
--