http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50274
Bug #: 50274 Summary: Conditionnal rethrow Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: romain.geiss...@gmail.com This bug could be reproduced on x86_64 with G++ 4.5.x, 4.6.x and the current trunk. Target: x86_64-unknown-linux-gnu Configured with: /prj/compwork2/geissler/trunk/configure --prefix=/prj/compwork2/geissler/install --enable-shared --enable-languages=c,c++ --disable-libgcj --enable-checking --enable-plugin --with-gmp=/sw/st/gnu_compil/gnu/linux-rh-ws-4-x86_64/ --with-mpfr=/sw/st/gnu_compil/gnu/linux-rh-ws-4-x86_64/ --with-mpc=/sw/st/gnu_compil/gnu/linux-rh-ws-4-x86_64/ --with-ppl=/sw/st/gnu_compil/gnu/linux-rh-ws-4-x86_64/ --with-cloog=/sw/st/gnu_compil/gnu/linux-rh-ws-4-x86_64/ Thread model: posix gcc version 4.7.0 20110829 (experimental) (GCC) Compilation line: g++ rethrow.cpp -o rethrow The rethrow made in foo handler is not caught by the main handler as it should. Here is the execution trace: throw caught foo terminate called after throwing an instance of 'int' Aborted It works with GCC 4.4.x : throw caught foo caught main If the test "if (!i)" is removed, it works. If foo prototype is changed to return void it also works.