I've found this sort of bug in xfBuild: import std.stdio;
class Deps { } struct Mod { Deps deps; } void main() { Mod[] compileArray; foreach (i; 0 .. 2) { compileArray ~= Mod(new Deps); } foreach (mod; compileArray) { mod.deps = null; } foreach (mod; compileArray) { writeln(mod.deps is null); // surprise! } } This will print "false, false". It's interesting how easy it is to lose sight of value semantics. I only discovered this bug by chance and would have easily missed it by eye. The fix is to use "foreach (ref mod; compileArray)". Even though mod.deps ends up being a reference to an object, it's the reference itself that ends up being nulled, not the object itself. E.g.: class Deps { } struct Mod { Deps deps; } void main() { Mod mod1 = Mod(new Deps); Mod mod2 = mod1; assert(mod1.deps is mod2.deps); mod1.deps = null; assert(mod1.deps !is mod2.deps); } Anyway I thought this was interesting. I wonder if this sort of bug is lurking in some other D codebases out there..