April 14, 2017
https://issues.dlang.org/show_bug.cgi?id=17326

          Issue ID: 17326
           Summary: 2.072 gc changes totally broke 32 bit Windows DLLs
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: regression
          Priority: P1
         Component: druntime
          Assignee: nobody@puremagic.com
          Reporter: bugzilla@digitalmars.com

How it is supposed to work is that if a program dynamically loads a DLL, then they need to share the same GC instance. This is done by the DLL, when it loads, calling gc_setProxy(the main program's gc instance pointer).

The DLL links in gcstub/gc.d, which contained a Proxy struct with a bunch of fields that are pointers to functions. The equivalent is gc/gc.d.

Unfortunately, 2.072 totally revamped everything about this in gc/*, but failed to update gcstub/gc. So now gcstub.gc_setProxy() gets sent a pointer to a completely different interface, causing it to crash when used.

This is a disastrous bug, as it makes using D DLLs completely unusable in Win32, and is likely the source of the common complaint that Windows DLLs do not work.

--