we want to write the mixin expansion file also on error, but there
are too many ways to terminate dmd (e.g. fatal() which calls exit(EXIT_FAILURE)),
so we can't rely on scope(exit) ... in tryMain() actually being executed
so we add atexit(&flushMixins); for those fatal exits (with the GC still valid)
we want to write the mixin expansion file also on error, but there are too many ways to terminate dmd (e.g. fatal() which calls exit(EXIT_FAILURE)), so we can't rely on scope(exit) ... in tryMain() actually being executed so we add atexit(&flushMixins); for those fatal exits (with the GC still valid)