This is a derived issue from bug 7353. test.d ---- import std.stdio; struct S { static uint ci = 0; static uint di = 0; uint i; this(int x) { i = ci++; writeln("new: ", i); } this(this) { i = ci++; writeln("copy ", i); } ~this() { ++di; writeln("del ", i); } S save3() { return this; } } void main() { { auto s = S(1), t = S(1); assert(S.ci == 2); t = s.save3(); assert(S.ci == 3); // line 23 } } Command line: ---- dmd -inline -run test.d Output: ---- new: 0 new: 1 del 1 del 0 del 0 core.exception.AssertError@test(23): Assertion failure Postblit is not called.
See also issue 7516
https://github.com/D-Programming-Language/dmd/pull/939
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/af733d53761e8c9e3d53fff3275e0451eb23b20d fix Issue 7506 - Postblit does not called properly with inlining https://github.com/D-Programming-Language/dmd/commit/481f5585639de6dbf94e6b80510f767dc5e81b64 Merge pull request #939 from 9rnsr/fix_postblit Issue 7506 & 7530 more postblit fixes