------- Comment #6 from mark dot woollard at macrovision dot com 2006-06-07 23:13 ------- I have come across this issue too. It seems that if the exception being thrown is passed back across a function call then the rethrow will cause a segfault. If the catch and rethrow are in the same function as the original throw then the issue does not reveal itself. Example code that causes the problem is below and I have tested with this against compilers from 3.4.3 through to 4.1.1. The same code behaves correctly on all other platforms we work with.
#include <iostream> #include <string> #include <exception> class derived : public std::exception { public: derived( const std::string &m ) : msg(m) { } virtual ~derived() throw() {} const char *what() const throw() { return msg.c_str( ); } private: std::string msg; }; void test( ) { derived e("Screwed"); throw e; } int main ( int argc, char * argv[] ) { try { try { test( ); // Switching to the following in place of calling test() works correctly // derived e("Screwed"); throw e; } catch( const std::exception &e ) { std::cout << "Inner catch: " << e.what() << std::endl; throw; // Segfaults } } catch( const std::exception & e ) { std::cout << "Outer catch: " << e.what() << std::endl; } return 0; } -- mark dot woollard at macrovision dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mark dot woollard at | |macrovision dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26397