digitalmars.D.bugs - [Issue 892] New: Another bug in the new GC - pointers in mixins
- d-bugmail puremagic.com (43/43) Jan 26 2007 http://d.puremagic.com/issues/show_bug.cgi?id=892
- d-bugmail puremagic.com (40/40) Jan 26 2007 http://d.puremagic.com/issues/show_bug.cgi?id=892
- d-bugmail puremagic.com (9/9) Jan 26 2007 http://d.puremagic.com/issues/show_bug.cgi?id=892
http://d.puremagic.com/issues/show_bug.cgi?id=892
Summary: Another bug in the new GC - pointers in mixins
Product: D
Version: 1.001
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: wbaxter gmail.com
This is actually with DMD version 1.003 (and I suspect 1.001, and 1.002).
This program destroys the object from the mixin even though it is still very
much referenced by live objects in the program.
------
import std.stdio;
static import std.gc;
class SomeObject
{
this() { writefln("SomeObject created"); }
~this() { writefln("SomeObject destroyed"); }
}
template Mix()
{
void init() {
ptr = new SomeObject;
}
SomeObject ptr;
}
class Container
{
this() { init(); }
mixin Mix;
}
void main()
{
auto x = new Container;
writefln("---Pre collect");
std.gc.fullCollect();
writefln("---Post collect");
}
--
Jan 26 2007
http://d.puremagic.com/issues/show_bug.cgi?id=892
OK, the compiler was being a bit too smart apparently, realizing that x would
no longer be used. That makes the test appear to fail all the way back to DMD
0.176. So I should have put writeflns in at the end to make sure the data had
a reason to stick around.
Upon doing that, the example works in DMD 1.0 and fails in 1.001--1.003 (I went
ahead and tried them all).
Here's the modified test:
-----------------
import std.stdio;
static import std.gc;
class SomeObject
{
this() { writefln("SomeObject created"); }
~this() { writefln("SomeObject destroyed"); }
}
template Mix()
{
void init() {
ptr = new SomeObject;
}
SomeObject ptr;
}
class Container
{
this() { init(); }
mixin Mix;
int v = 10;
}
void main()
{
auto x = new Container;
writefln("---Pre collect");
std.gc.fullCollect();
writefln("---Post collect");
writefln(x.v);
writefln(x.ptr);
}
--
Jan 26 2007
http://d.puremagic.com/issues/show_bug.cgi?id=892
wbaxter gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Gone in 1.004.
--
Jan 26 2007









d-bugmail puremagic.com 