[Issue 14517] New: Templated static ctor + separate compilation = module cycles
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Apr 28 12:41:54 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=14517
Issue ID: 14517
Summary: Templated static ctor + separate compilation = module
cycles
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: schveiguy at yahoo.com
Even though druntime plays a role, I'm marking this as DMD, since druntime
cannot figure this out without compiler help.
Example:
mod1.d ==========
module mod1;
import std.stdio;
struct S(T)
{
shared static T t;
shared static this() {writeln(T.stringof); _t = 5;}
}
void main() {}
mod2.d ==========
module mod2;
import mod1;
import mod3;
S!int x;
mod3.d ==========
module mod3;
import mod1;
import mod2;
S!int x;
command line ====
dmd mod1.d mod2.d mod3.d
./mod1
int
dmd -c mod2.d
dmd -c mod3.d
dmd mod1.d mod2.o mod3.o
./mod1
object.Exception at src/rt/minfo.d(162): Aborting: Cycle detected between modules
with ctors/dtors:
mod2 -> mod3 -> mod2
================
Note that the module ctor only runs once (I only see one printout of 'int'), so
at least that is figured out at runtime.
Examination of the module info using druntime debugging printfs shows that in
the first case (when all 3 modules are compiled at once), mod1 is marked as
having a static CTOR, mod2 and 3 are not. In the second case, mod1 is not
marked as having a static ctor, mod2 and mod3 are.
I wonder if a separate "linkage" module info with just the static ctors
dependent on both modules should be created with a dependency on the
instantiating and the template module could be created, which should eliminate
any issues (it's definitely possible right now to construct a cycle between
instantiating and template modules). The instantiating module should have a
dependency on the linkage module as well, since there could be a cycle there
also! It's a very complex issue, but probably not very common.
--
More information about the Digitalmars-d-bugs
mailing list