November 10, 2014 [Issue 13706] New: 76 duplicate static dtors emitted and counting | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=13706 Issue ID: 13706 Summary: 76 duplicate static dtors emitted and counting Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: wrong-code Severity: major Priority: P1 Component: DMD Assignee: nobody@puremagic.com Reporter: Marco.Leise@gmx.de When using separate compilation, DMD emits and calls many duplicate static dtors. In one larger code base I found the counter at 76 while debugging an issue. Here is a reduced test case that creates only one duplicate: ----------8<---------- module main; import a, b; void main() { A a; B b; } ---------->8---------- ----------8<---------- module a; import res; struct A { Block!() field; } ---------->8---------- ----------8<---------- module b; import std.typecons, res; struct B { Block!() field; } ---------->8---------- ----------8<---------- module res; struct Block() { import core.stdc.stdio; shared static ~this() { debug printf ("struct Block shared static dtor %s\n", __FUNCTION__.ptr); } static ~this() { debug printf ("struct Block static dtor %s\n", __FUNCTION__.ptr); } } ---------->8---------- This prints on DMD 2.066.1 and 2.065.0: struct Block static dtor res.Block!().Block._staticDtor6 struct Block static dtor res.Block!().Block._staticDtor4 struct Block shared static dtor res.Block!().Block._sharedStaticDtor5 struct Block shared static dtor res.Block!().Block._sharedStaticDtor3 On DMD 2.064.2 the output was: struct Block static dtor res.Block!().Block._staticDtor11 struct Block static dtor res.Block!().Block._staticDtor4 struct Block shared static dtor res.Block!().Block._sharedStaticDtor10 struct Block shared static dtor res.Block!().Block._sharedStaticDtor3 Tagged as wrong code, like when a common dtor would be called twice by the runtime. P.S.: I also wonder what the static dtors 1 and 2 are created for. I often get runtime errors about circular dependencies of modules with static constructors, but cannot see any in the respective modules. -- |
Copyright © 1999-2021 by the D Language Foundation