xref: /llvm-project/bolt/test/runtime/X86/Inputs/exception4.cpp (revision 0224bdce9263b74806b94426b33e97e030ab7a79)
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 
never_throws()19e903671bSAmir Ayupov void never_throws() throw () {
20e903671bSAmir Ayupov   printf("this statement is cold and should be outlined\n");
21e903671bSAmir Ayupov }
22e903671bSAmir Ayupov 
main(int argc,char ** argv)23e903671bSAmir Ayupov int main(int argc, char **argv)
24e903671bSAmir Ayupov {
25*0224bdceSAmir Ayupov   for (unsigned i = 0; i < 1000; ++i) {
26e903671bSAmir Ayupov     try {
27e903671bSAmir Ayupov       if (argc == 2) {
28e903671bSAmir Ayupov         never_throws(); // should be cold
29e903671bSAmir Ayupov       }
30e903671bSAmir Ayupov       try {
31e903671bSAmir Ayupov         if (argc == 2) {
32e903671bSAmir Ayupov           never_throws(); // should be cold
33e903671bSAmir Ayupov         }
34e903671bSAmir Ayupov         throw ExcA();
35e903671bSAmir Ayupov       } catch (ExcA) {
36e903671bSAmir Ayupov         printf("catch 2\n");
37e903671bSAmir Ayupov         throw new int();
38e903671bSAmir Ayupov       }
39e903671bSAmir Ayupov     } catch (...) {
40e903671bSAmir Ayupov       printf("catch 1\n");
41e903671bSAmir Ayupov     }
42e903671bSAmir Ayupov 
43e903671bSAmir Ayupov     try {
44e903671bSAmir Ayupov       try {
45a80e1e49SAmir Ayupov         foo(argc);
46e903671bSAmir Ayupov       } catch (ExcC) {
47e903671bSAmir Ayupov         printf("caught ExcC\n");
48e903671bSAmir Ayupov       }
49e903671bSAmir Ayupov     } catch (ExcG) {
50e903671bSAmir Ayupov       printf("caught ExcG\n");
51e903671bSAmir Ayupov     }
52e903671bSAmir Ayupov   }
53e903671bSAmir Ayupov 
54e903671bSAmir Ayupov   return 0;
55e903671bSAmir Ayupov }
56