On 28/08/2019 18.04, Rene Engelhard wrote:
[ Cc'ing the GCC maintainers ] Hi, On Tue, Aug 27, 2019 at 03:47:50PM +0200, Sorin Manolache wrote:When compiling a program with g++-9 (4:9.2.1-3) and linking with libcppunit then I get a segfault if the program uses std::stack.Hrmpf.For example: void f() { std::stack<std::string> s1; std::stack<unsigned int> s2; std::string str; CPPUNIT_ASSERT(r.empty()); // segfault here }That isn't a complete testcase? r doesn't exist (did you mean str?) or some of s1,s2 (empty stack)? Does it only happen if you CPPUNT_ASSERT it or also on "normal" std::stack usage? But I assume you file it here because it only happens with cppunit?
Sorry, I cannot reproduce the problem any more. Maybe I had some weird combination of g++ packages/libs on my system that some upgrade resolved.
Anyway, here is the real test case: #include <stack> #include <string> #include <cppunit/TestAssert.h> class X { private: std::stack<std::string> s1; std::stack<unsigned int> s2; }; int main(int argc, char *argv[]) { X *x = new X(); // delete x; std::string r; CPPUNIT_ASSERT(r.empty()); return 0; }Both valgrind and gdb reported that the problem was in the destructor ~Message, called by CPPUNIT_ASSERT. Message contains a std::deque<std::string> and std::stack<T> is implemented by a std::deque<T>.
Anyway it was quite weird because it did not crash if I had just one stack in class X. I had to have two of them in order to have the crash.
std::stack alone, without cppunit, worked fine. Anyway, as said, I cannot reproduce it any more. Sorry for the false alarm. Best regards, Sorin