www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 9697] New: removing imports or static constructors from di files can break runtime initialization order

http://d.puremagic.com/issues/show_bug.cgi?id=9697

           Summary: removing imports or static constructors from di files
                    can break runtime initialization order
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: r.sagitario gmx.de


--- Comment #0 from Rainer Schuetze <r.sagitario gmx.de> 2013-03-12 00:05:28
PDT ---
Created an attachment (id=1199)
demonstrate broken init order with optimized di files

D source files often import modules that are not needed for the declaration of
public symbols in the module, but by their implementation. When reducing
dependencies from di import files by removing imports, the runtime
initialization order can be broken.

This is caused by a module not being part of the dependency list in the module
info, if it has no static constructor/destructor and none of its imports has
one, transitively.

See the attached file for an example.

The straight forward solution is to always add imported modules to the
dependency list. This has the drawback that C wrapper header files will always
need to have a static library that contains the module info declarations.

It might work to just add "static this();" to di files that have removed
imports, if it is known to depend on these modules during runtime
initialization. Adding a declaration for non-existing code seems like a dirty
hack, there should be some more explicite way...

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 12 2013