June 05, 2023 [Issue 23974] New: A ModuleInfo in a separate Windows DLL should not be referred to by MIimportedModules | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=23974 Issue ID: 23974 Summary: A ModuleInfo in a separate Windows DLL should not be referred to by MIimportedModules Product: D Version: D2 Hardware: All OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: bugzilla@digitalmars.com An instance of ModuleInfo contains an array of the ModuleInfo's for imported modules. The purpose is to ensure the static constructors of imported modules are run before the static constructor of the module with the ModuleInfo. However, when a DLL is loaded, its DllMain is called, which then calls the DLL's static initialization functions. So, already, all those constructors are already called. There can be no further initialization order dependency of the EXE's static constructors on the DLL's static constructors. Hence, the ModuleInfo's of a module imported from a DLL should not be listed in the ImportedModules of the EXE module. But suppose the DLL depends on the EXE's static constructors being run first? Or if two DLLs have mutually dependent static constructors? I don't see any good way to resolve this, and in fact, if DLLs and EXEs are set up that way, it sounds like a failed attempt at encapsulation. See also: https://issues.dlang.org/show_bug.cgi?id=23177 -- |
Copyright © 1999-2021 by the D Language Foundation