Bug 7506 – Postblit does not called properly with inlining

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-02-15T06:33:00Z
Last change time
2012-05-12T17:25:21Z
Keywords
pull, wrong-code
Assigned to
nobody
Creator
k.hara.pg

Comments

Comment #0 by k.hara.pg — 2012-02-15T06:33:28Z
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.
Comment #1 by lovelydear — 2012-04-20T00:43:23Z
See also issue 7516
Comment #2 by k.hara.pg — 2012-05-10T22:52:52Z
Comment #3 by github-bugzilla — 2012-05-12T15:07:25Z
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