http://d.puremagic.com/issues/show_bug.cgi?id=9985
--- Comment #5 from Kenji Hara <k.hara...@gmail.com> 2013-04-25 00:56:11 PDT --- (In reply to comment #0) > For this program: http://dpaste.dzfl.pl/d73575a1 Don't link to external web site. Instead please directly paste the code in comment, or attach code file. // Code: import std.stdio; struct S { ubyte* b; ubyte buf[128]; this(this) { writeln("postblit"); } } auto ref makeS() { S s; s.b = s.buf; writeln("made S at ", cast(void*)&s, ", s.b == ", s.b); return s; } void main() { S s = makeS(); writeln("got back S at ", cast(void*)&s, ", s.b == ", s.b); } > I get > > made S at 18FC64, s.b == 18FC68 > got back S at 18FCF4, s.b == 18FC68 > > as output. Note that no "postblit" message was printed. > Patching s.b to point into the newly allocated struct in postblit is crucial > here, but it seems like the postblit constructor isn't called, nor is there > any > attempt > to optimize away the temporary in `makeS()` even with -O. > Am I doing something wrong? > > http://dpaste.dzfl.pl/cc460feb // Code: import std.stdio; struct S { ubyte* b; ubyte buf[128]; this(this) { writeln("postblit"); } } auto ref makeS() { S s; s.b = s.buf; writeln("made S at ", cast(void*)&s, ", s.b == ", s.b); return s; } void main() { S s = makeS(); writeln("got back S at ", cast(void*)&s, ", s.b == ", s.b); } > copies the struct and ivokes postblit just fine. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------