[GSoC] Strange struct destructor-postblit-writeln interaction bug.
dsimcha
dsimcha at yahoo.com
Wed Jun 22 08:13:43 PDT 2011
== Quote from Cristi Cobzarenco (cristi.cobzarenco at gmail.com)'s article
> --bcaec520ef999f971804a64e04e4
> Content-Type: text/plain; charset=ISO-8859-1
> While working on my project, I ran into a very hard to trace bug that I
> finally managed to isolate and reproduce on a small scale.
> The code:
> import std.stdio;
> import std.conv;
> struct Test {
> int x;
> this( int m ) { x = m; }
> this( this ) { writeln( "Postblit: ", x ); }
> ~this() { x = 42; }
> string toString() { return to!string( x ); }
> }
> int main(string[] argv) {
> auto a = Test(3);
> writeln( a );
> return 0;
> }
> Prints 42 on my computer, instead of 3. The writeln in the postblit
> constructor shows that the object is copied 6 times, and only on the last
> copy x becomes 42 instead of 3. Somehow the destructor gets called on an
> object before it is copied. The copying that causes the problem is in
> format.d at 1599 as far as I can tell with my debugger.
> I don't know if it's high priority for everyone, but it certainly is for me.
This is definitely a pretty severe bug and I can reproduce it. Please file a bug
report in Bugzilla. (http://d.puremagic.com/issues/) It's ok to occasionally
bring up very high priority bugs on this newsgroup, but they should **always** be
filed in Bugzilla as well because otherwise they get forgotten.
More information about the Digitalmars-d
mailing list