On Tue, Sep 21, 2021 at 07:42:48PM +0000, jfondren via Digitalmars-d-learn wrote: > On Monday, 13 September 2021 at 17:18:30 UTC, eugene wrote: > > I do not understand at all why GC considers those sg0 and sg1 as > > unreferenced. > > And why old gdc (without -Os) and old ldc do not. > > Conclusion: > > There's nothing special about sg0 and sg1, except that they're part of > Stopper. The Stopper in main() is collected before the end of main() > because it's not used later in the function and because there are > apparently no other references to it that the GC can find (because the > only reference is hidden inside the Linux epoll API).
Quick and dirty workaround: keep references to those objects in static variables to prevent GC collection: auto myFunc(...) { static MyType* dontCollect = null; MyType* obj = new MyObject(...); dontCollect = obj; scope(exit) dontCollect = null; // may collect after function exits ... // function body goes here } T -- Verbing weirds language. -- Calvin (& Hobbes)