1 // PR 3719
2 // Test that an unexpected handler can rethrow to categorize.
3 // { dg-do run }
4 
5 #include <exception>
6 
7 extern "C" void abort ();
8 
9 struct One { };
10 struct Two { };
11 
12 static void
handle_unexpected()13 handle_unexpected ()
14 {
15   try
16   {
17     throw;
18   }
19   catch (One &)
20   {
21     throw Two ();
22   }
23 }
24 
25 static void
doit()26 doit () throw (Two)
27 {
28   throw One ();
29 }
30 
main()31 int main ()
32 {
33   std::set_unexpected (handle_unexpected);
34 
35   try
36   {
37     doit ();
38   }
39   catch (Two &)
40   {
41   }
42   catch (...)
43   {
44     abort ();
45   }
46 }
47