www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript

c++ - Still fail my exception test

↑ ↓ ← Steve <Steve_member pathlink.com> writes:
Walter,

The 8.32 beta 15 does no longer crash when I tried the exception tests on my
Windows XP.  However, the results are not what expected.  The detailed is as
follows:

case 3a.  I have to press Ctrl-C to exit program.
case 3b-3f the memory still leaks.
case 4a-4f the memory still leaks.

These cases are the ones I sent you before.

Thanks,
Steve
Jan 04 2003
↑ ↓ → Christof Meerwald <cmeerw web.de> writes:
On Sun, 5 Jan 2003 07:20:13 +0000 (UTC), Steve wrote:
 The 8.32 beta 15 does no longer crash when I tried the exception tests on my
 Windows XP.  However, the results are not what expected.  The detailed is as
 follows:
 
 case 3a.  I have to press Ctrl-C to exit program.
 case 3b-3f the memory still leaks.
 case 4a-4f the memory still leaks.

A simple fix seems to be to use the same trick in core\vecnew.cpp (__vec_delete and __vec_dtor) as core\except.cpp does when calling a destructor (saving SP before calling the destructor and restoring it afterwards): __asm mov spsave,sp #if STDCALL _ECX = (long)Parray + Nelem * Sizelem; (*(dtor_t)Dtor)(DTORmostderived); #else (*(dtor_t)Dtor)(DTORmostderived,(char *)Parray + Nelem * Sizelem); #endif __asm mov sp,spsave And DMC doesn't pass a pointer to a destructor to __vec_new: struct A { A() { } ~A() { } }; int main() { new A[10]; } generated code: push 0 <-- this should be the address of a destructor push offset FLAT:??0A QAE XZ push 0Ah push 1 push 0 call near ptr ?__vec_new YAPAXPAXIHP6CPAXXZP6CHXZ Z And one more: core\except.cpp (line 1225 and line 1242) uses _cppeh_sv.dtor_nest. Shouldn't that be _getthreaddata()->t_cppeh_sv.dtor_nest if compiled with -D_MT and _cppeh_sv.dtor_nest only in the single-threaded case? bye, Christof -- http://cmeerw.org JID: cmeerw jabber.at mailto cmeerw at web.de ...and what have you contributed to the Net?
Jan 06 2003