Bug 499 – Multiple overrides of the destructor when using signals

Status
RESOLVED
Resolution
FIXED
Severity
blocker
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Windows
Creation time
2006-11-13T03:39:00Z
Last change time
2014-02-15T13:18:41Z
Assigned to
bugzilla
Creator
samukha

Comments

Comment #0 by samukha — 2006-11-13T03:39:39Z
The following gives 'test.d(233): function test.Test.Signal!(Args)._dtor multiple overrides of same function': import std.stdio, std.signals; class Args { int foo; } class Base { ~this() { writefln("Base dtor!"); } } class Test : Base { mixin Signal!(Args) A; mixin Signal!(Args) B; ~this() { writefln("Test dtor"); } } void main() { auto test = new Test; } //------------------------------ The code compiles ok, if there is no base class or no destructor in the base class.
Comment #1 by wbaxter — 2006-11-13T11:10:32Z
[email protected] wrote: > http://d.puremagic.com/issues/show_bug.cgi?id=499 > > Summary: Multiple overrides of the destructor when using signals > Product: D > Version: 0.173 > Platform: PC > OS/Version: Windows > Status: NEW > Severity: blocker > Priority: P2 > Component: DMD > AssignedTo: [email protected] > ReportedBy: [email protected] > > > The following gives 'test.d(233): function test.Test.Signal!(Args)._dtor > multiple overrides of same function': > > import std.stdio, std.signals; > > class Args > { > int foo; > } > > class Base > { > ~this() > { > writefln("Base dtor!"); > } > } > > class Test : Base > { > mixin Signal!(Args) A; > mixin Signal!(Args) B; > > ~this() > { > writefln("Test dtor"); > } > } > > > void main() > { > auto test = new Test; > } > > //------------------------------ > > The code compiles ok, if there is no base class or no destructor in the base > class. > > This is already fixed in the version of std.signals here: http://www.digitalmars.com/d/phobos/signals.d --bb
Comment #2 by samukha — 2006-11-13T13:20:41Z
On Tue, 14 Nov 2006 02:05:36 +0900, Bill Baxter <[email protected]> wrote: >[email protected] wrote: >> http://d.puremagic.com/issues/show_bug.cgi?id=499 >> >> Summary: Multiple overrides of the destructor when using signals >> Product: D >> Version: 0.173 >> Platform: PC >> OS/Version: Windows >> Status: NEW >> Severity: blocker >> Priority: P2 >> Component: DMD >> AssignedTo: [email protected] >> ReportedBy: [email protected] >> >> >> The following gives 'test.d(233): function test.Test.Signal!(Args)._dtor >> multiple overrides of same function': >> >> import std.stdio, std.signals; >> >> class Args >> { >> int foo; >> } >> >> class Base >> { >> ~this() >> { >> writefln("Base dtor!"); >> } >> } >> >> class Test : Base >> { >> mixin Signal!(Args) A; >> mixin Signal!(Args) B; >> >> ~this() >> { >> writefln("Test dtor"); >> } >> } >> >> >> void main() >> { >> auto test = new Test; >> } >> >> //------------------------------ >> >> The code compiles ok, if there is no base class or no destructor in the base >> class. >> >> > >This is already fixed in the version of std.signals here: >http://www.digitalmars.com/d/phobos/signals.d > >--bb It's not. The problem is not with signals but with mixed in destructors template TDtor() { ~this() { writefln("Mixed-in dtor"); } } class Base { ~this() { writefln("Base dtor"); } } class Test : Base { mixin TDtor A; mixin TDtor B; ~this() { writefln("Test dtor"); } } void main() { auto test = new Test; } If i get it right, this should compile and output: Test dtor Mixed-in dtor Mixed-in dtor Base dtor
Comment #3 by wbaxter — 2006-11-13T13:55:28Z
Max Samuha wrote: > On Tue, 14 Nov 2006 02:05:36 +0900, Bill Baxter <[email protected]> > wrote: > > >>[email protected] wrote: >> >>>http://d.puremagic.com/issues/show_bug.cgi?id=499 >>> >>> Summary: Multiple overrides of the destructor when using signals >>> Product: D >>> Version: 0.173 >>> Platform: PC >>> OS/Version: Windows >>> Status: NEW >>> Severity: blocker >>> Priority: P2 >>> Component: DMD >>> AssignedTo: [email protected] >>> ReportedBy: [email protected] >>> >>> >>>The following gives 'test.d(233): function test.Test.Signal!(Args)._dtor >>>multiple overrides of same function': >>> >>>import std.stdio, std.signals; >>> >>>class Args >>>{ >>> int foo; >>>} >>> >>>class Base >>>{ >>> ~this() >>> { >>> writefln("Base dtor!"); >>> } >>>} >>> >>>class Test : Base >>>{ >>> mixin Signal!(Args) A; >>> mixin Signal!(Args) B; >>> >>> ~this() >>> { >>> writefln("Test dtor"); >>> } >>>} >>> >>> >>>void main() >>>{ >>> auto test = new Test; >>>} >>> >>>//------------------------------ >>> >>>The code compiles ok, if there is no base class or no destructor in the base >>>class. >>> >>> >> >>This is already fixed in the version of std.signals here: >>http://www.digitalmars.com/d/phobos/signals.d >> >>--bb > > > It's not. The problem is not with signals but with mixed in > destructors > > template TDtor() > { > ~this() > { > writefln("Mixed-in dtor"); > } > } > > class Base > { > ~this() > { > writefln("Base dtor"); > } > } > > class Test : Base > { > mixin TDtor A; > mixin TDtor B; > > ~this() > { > writefln("Test dtor"); > } > } > > void main() > { > auto test = new Test; > } > > If i get it right, this should compile and output: > > Test dtor > Mixed-in dtor > Mixed-in dtor > Base dtor > Ah, I see. Try moving your destrutor before the mixins. --bb
Comment #4 by samukha — 2006-11-14T03:05:26Z
On Tue, 14 Nov 2006 04:54:04 +0900, Bill Baxter <[email protected]> wrote: > >Ah, I see. Try moving your destrutor before the mixins. > >--bb It works, thanks. But the bug should be fixed anyway
Comment #5 by bugzilla — 2006-11-17T05:20:32Z
Fixed DMD 0.174