1 // Make sure that we call terminate when a throw() spec is violated even 2 // with -fnothrow-opt. The function pointers are there to make sure that 3 // the compiler doesn't get clever about optimizing the calls based on 4 // knowledge about the called functions. 5 6 // { dg-options "-fnothrow-opt" } 7 // { dg-do run } 8 9 #include <exception> 10 #include <cstdlib> 11 my_terminate()12void my_terminate () 13 { 14 std::exit (0); 15 } 16 g()17void g() { throw 1; } 18 void (*p1)() = g; f()19void f() throw() { p1(); } 20 void (*p2)() = f; h()21void h() { p2(); } 22 main()23int main() 24 { 25 std::set_terminate (my_terminate); 26 27 try { h(); } 28 catch (int) { } 29 30 return 1; 31 } 32