1*e903671bSAmir Ayupov #include <stdio.h>
2*e903671bSAmir Ayupov 
3*e903671bSAmir Ayupov class ExcA {};
4*e903671bSAmir Ayupov class ExcB {};
5*e903671bSAmir Ayupov class ExcC {};
6*e903671bSAmir Ayupov class ExcD {};
7*e903671bSAmir Ayupov class ExcE {};
8*e903671bSAmir Ayupov class ExcF {};
9*e903671bSAmir Ayupov class ExcG {};
10*e903671bSAmir Ayupov 
foo(int a)11*e903671bSAmir Ayupov void foo(int a)
12*e903671bSAmir Ayupov {
13*e903671bSAmir Ayupov   if (a > 1)
14*e903671bSAmir Ayupov     throw ExcG();
15*e903671bSAmir Ayupov   else
16*e903671bSAmir Ayupov     throw ExcC();
17*e903671bSAmir Ayupov }
18*e903671bSAmir Ayupov 
filter_only(int a)19*e903671bSAmir Ayupov void filter_only(int a) throw (ExcA, ExcB, ExcC, ExcD, ExcE, ExcF) {
20*e903671bSAmir Ayupov   foo(a);
21*e903671bSAmir Ayupov }
22*e903671bSAmir Ayupov 
main(int argc,char ** argv)23*e903671bSAmir Ayupov int main(int argc, char **argv)
24*e903671bSAmir Ayupov {
25*e903671bSAmir Ayupov   asm volatile ("nop;nop;nop;nop;nop");
26*e903671bSAmir Ayupov   try {
27*e903671bSAmir Ayupov     try {
28*e903671bSAmir Ayupov       asm volatile ("nop;nop;nop;nop;nop");
29*e903671bSAmir Ayupov       throw ExcA();
30*e903671bSAmir Ayupov     } catch (ExcA) {
31*e903671bSAmir Ayupov       asm volatile ("nop;nop;nop;nop;nop");
32*e903671bSAmir Ayupov       printf("catch 2\n");
33*e903671bSAmir Ayupov       throw new int();
34*e903671bSAmir Ayupov     }
35*e903671bSAmir Ayupov   } catch (...) {
36*e903671bSAmir Ayupov     asm volatile ("nop;nop;nop;nop;nop");
37*e903671bSAmir Ayupov     printf("catch 1\n");
38*e903671bSAmir Ayupov   }
39*e903671bSAmir Ayupov 
40*e903671bSAmir Ayupov   try {
41*e903671bSAmir Ayupov     asm volatile ("nop;nop;nop;nop;nop");
42*e903671bSAmir Ayupov     try {
43*e903671bSAmir Ayupov       asm volatile ("nop;nop;nop;nop;nop");
44*e903671bSAmir Ayupov       filter_only(argc);
45*e903671bSAmir Ayupov     } catch (ExcC) {
46*e903671bSAmir Ayupov       asm volatile ("nop;nop;nop;nop;nop");
47*e903671bSAmir Ayupov       printf("caught ExcC\n");
48*e903671bSAmir Ayupov     }
49*e903671bSAmir Ayupov   } catch (ExcG) {
50*e903671bSAmir Ayupov     asm volatile ("nop;nop;nop;nop;nop");
51*e903671bSAmir Ayupov     printf("caught ExcG\n");
52*e903671bSAmir Ayupov   }
53*e903671bSAmir Ayupov 
54*e903671bSAmir Ayupov   return 0;
55*e903671bSAmir Ayupov }
56