|
Boost Testing : |
From: John Maddock (john_at_[hidden])
Date: 2005-09-06 12:55:02
> The really annyying this is:
>
> a) this used to work perfectly for all the borland DLL tests. It only
> started to occur after some changes in export.hpp. (and maybe somewhere
> else).
The only information I can find on the web about this is here:
http://bdn.borland.com/article/0,1410,18715,00.html. Based upon the fact
that the application runs to completion before the error, it looks like you
have a destructor that calls a virtual function? If so this can be an error
if the derived class has had it's destructor called, so the virtual call
gets directed to the base class's pure virtual function instead. This may
only show up in the dll build if the exe (and any over-riden functions it
contains) gets unloaded before the dll, and/or if the objects are destroyed
by the dll code. I suspect not all compilers will diagnose this in the same
way as well: it assumes that the derived class's destructor fixes up the
virtual table to point to the base class's table (which hasn't been
destroyed yet).
I've also seen some suggestions that this is more likely when using dll's
because the linker is less able to diagnose these issues then: it sees that
the destructor makes a virtual function call, but because the base class is
in a dll, it isn't smart enough to realise that the method is abstract, and
so ends up linking to a stub proceedure rather than a real function.
> b) It only occurs on some of the tests.
>
> c) It may be particular to my machine. I've noticed that my borland test
> failures on my machine don't always occur in the regression test matrix.
> So it seems there are various versions of borland 5.64 out there.
I don't think so, as far as I know there is only one 5.64 *compiler*.
However, I believe there were a couple of minor fixes to some of the
platform headers in C++ Builder X, and there are some updated linker
versions available as well I believe.
If I get a chance I'll run the tests here and see what happens.
John.