f7eeb82ca4
On Solaris x86, with both GCC 4.8 and 4.9, running cppcheck causes a segmentation fault when process terminates. The backtrace (dbx) where =>[1] _ZNSt14_List_iteratorIP5CheckEppEv(0x804798c, 0x8047994, 0xc0d61d6, 0x291a), at 0x8291b7c [2] std::list<Check*, std::allocator, <Check*>void>::remove(0x84ab328, 0x80479c8, 0x80479d4, 0x82d96fc), at 0x82da984 [3] Check::~Check(0x84a9fc4, 0x83d232c, 0xfef411fb, 0x83d135c), at 0x82d9709 [4] CheckExceptionSafety::~CheckExceptionSafety(0x84a9fc4, 0xfee82a40, 0xfee82a40, 0xfedcf000), at 0x8311e7d [5] __static_initialization_and_destruction_0(0x0, 0xffff, 0xfedd4c80, 0xfedcf000), at 0x81b01f8 [6] _GLOBAL__sub_D__ZN20CheckExceptionSafety11destructorsEv(0x83d135c, 0xfedd4f18, 0x8047a50, 0x828a5f5, 0xfedcf000, 0x8047a68), at 0x81b023c [7] __do_global_dtors_aux(0xfedcf000, 0x8047a68, 0xfece28cd, 0x8047b08, 0x8047a48, 0xfedcf000), at 0x8185b90 [8] _fini(0x8047b08, 0x8047a48, 0xfedcf000, 0xfedd4f00, 0x8047a80, 0xfecd4e72), at 0x828a5f5 [9] _exithandle(0xfeffb7d8, 0x8185a1a, 0x0, 0x0, 0x0, 0x0), at 0xfece28cd [10] exit(0x1, 0x8047b70, 0x0, 0x8047ba3, 0x8047bba, 0x8047ce6), at 0xfecd4e72 The destructor order is somehow getting messed up on this platform. This fix moves the code away from header file and ensures _instances remains valid during termination. |
||
---|---|---|
.. | ||
check.cpp | ||
check.h | ||
check64bit.cpp | ||
check64bit.h | ||
checkassert.cpp | ||
checkassert.h | ||
checkautovariables.cpp | ||
checkautovariables.h | ||
checkbool.cpp | ||
checkbool.h | ||
checkboost.cpp | ||
checkboost.h | ||
checkbufferoverrun.cpp | ||
checkbufferoverrun.h | ||
checkclass.cpp | ||
checkclass.h | ||
checkcondition.cpp | ||
checkcondition.h | ||
checkexceptionsafety.cpp | ||
checkexceptionsafety.h | ||
checkinternal.cpp | ||
checkinternal.h | ||
checkio.cpp | ||
checkio.h | ||
checkleakautovar.cpp | ||
checkleakautovar.h | ||
checkmemoryleak.cpp | ||
checkmemoryleak.h | ||
checknonreentrantfunctions.cpp | ||
checknonreentrantfunctions.h | ||
checknullpointer.cpp | ||
checknullpointer.h | ||
checkobsolescentfunctions.cpp | ||
checkobsolescentfunctions.h | ||
checkother.cpp | ||
checkother.h | ||
checkpostfixoperator.cpp | ||
checkpostfixoperator.h | ||
checksizeof.cpp | ||
checksizeof.h | ||
checkstl.cpp | ||
checkstl.h | ||
checkstring.cpp | ||
checkstring.h | ||
checktype.cpp | ||
checktype.h | ||
checkuninitvar.cpp | ||
checkuninitvar.h | ||
checkunusedfunctions.cpp | ||
checkunusedfunctions.h | ||
checkunusedvar.cpp | ||
checkunusedvar.h | ||
checkvaarg.cpp | ||
checkvaarg.h | ||
config.h | ||
cppcheck.cpp | ||
cppcheck.h | ||
cppcheck.vcxproj | ||
cppcheck.vcxproj.filters | ||
cxx11emu.h | ||
errorlogger.cpp | ||
errorlogger.h | ||
executionpath.cpp | ||
executionpath.h | ||
lib.pri | ||
library.cpp | ||
library.h | ||
mathlib.cpp | ||
mathlib.h | ||
path.cpp | ||
path.h | ||
pcrerules.pri | ||
preprocessor.cpp | ||
preprocessor.h | ||
settings.cpp | ||
settings.h | ||
standards.h | ||
suppressions.cpp | ||
suppressions.h | ||
symboldatabase.cpp | ||
symboldatabase.h | ||
templatesimplifier.cpp | ||
templatesimplifier.h | ||
timer.cpp | ||
timer.h | ||
token.cpp | ||
token.h | ||
tokenize.cpp | ||
tokenize.h | ||
tokenlist.cpp | ||
tokenlist.h | ||
valueflow.cpp | ||
valueflow.h | ||
version.h | ||
version.rc |