Andrew Haley wrote: > There's a thread at > http://groups.google.co.uk/group/gnu.gcc.help/tree/browse_frm/thread/e85dce7d69fb7dc1 > which looks odd. It seems that the exception filter is not being > correctly processed. > > I can't find a Bugzilla entry for this. Is it really a bug? > > Andrew. > > quoted message -------------------------------------------------------- > From: "Mark Nelson" <[EMAIL PROTECTED]> > Newsgroups: gnu.gcc.help > Subject: uncaught exception in g++ 3.4 and 4.0 > Date: 13 Aug 2005 08:35:46 -0700 > > I have a case where an exception in the constructor of class with a > virtual base leads to termination: > > struct vbase {}; > > struct foo : virtual vbase { > foo() { > throw "exception in foo ctor"; > } > > }; > > main() > { > struct bar : public foo {}; > try { > bar a; > } > catch ( ... ) { > } > return 0; > > }; > > This program demonstrates the problem in g++ 3.4 a 4.0.0. Instead of > catching > the exception, the program terminates. The base dtor gets called as > expected, but upon return, there is some generated code that I can't > decipher, which jumps to some termination code at bad_alloc + 80. > > That should be a clue... but I'm unable to catch it.
The exception should be caught. The destructor for vbase should be run, but the destructors for foo and bar should not be, as foo was never completely constructed. Then, the catch-clause should run, and the program should return 0. I suspect the bug is in the logic for computing the exception specification for the implicitly-defined bar::bar() constructor. It should allow all exceptions, since the base class constructor does. -- Mark Mitchell CodeSourcery, LLC [EMAIL PROTECTED] (916) 791-8304