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