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 Ayupovvoid 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 Ayupovvoid filter_only(int a) throw (ExcA, ExcB, ExcC, ExcD, ExcE, ExcF) { 20*e903671bSAmir Ayupov foo(a); 21*e903671bSAmir Ayupov } 22*e903671bSAmir Ayupov never_throws()23*e903671bSAmir Ayupovvoid never_throws() throw () { 24*e903671bSAmir Ayupov printf("this statement is cold and should be outlined\n"); 25*e903671bSAmir Ayupov } 26*e903671bSAmir Ayupov main(int argc,char ** argv)27*e903671bSAmir Ayupovint main(int argc, char **argv) 28*e903671bSAmir Ayupov { 29*e903671bSAmir Ayupov for(unsigned i = 0; i < 1000000; ++i) { 30*e903671bSAmir Ayupov try { 31*e903671bSAmir Ayupov if (argc == 2) { 32*e903671bSAmir Ayupov never_throws(); // should be cold 33*e903671bSAmir Ayupov } 34*e903671bSAmir Ayupov try { 35*e903671bSAmir Ayupov if (argc == 2) { 36*e903671bSAmir Ayupov never_throws(); // should be cold 37*e903671bSAmir Ayupov } 38*e903671bSAmir Ayupov throw ExcA(); 39*e903671bSAmir Ayupov } catch (ExcA) { 40*e903671bSAmir Ayupov printf("catch 2\n"); 41*e903671bSAmir Ayupov throw new int(); 42*e903671bSAmir Ayupov } 43*e903671bSAmir Ayupov } catch (...) { 44*e903671bSAmir Ayupov printf("catch 1\n"); 45*e903671bSAmir Ayupov } 46*e903671bSAmir Ayupov 47*e903671bSAmir Ayupov try { 48*e903671bSAmir Ayupov try { 49*e903671bSAmir Ayupov filter_only(argc); 50*e903671bSAmir Ayupov } catch (ExcC) { 51*e903671bSAmir Ayupov printf("caught ExcC\n"); 52*e903671bSAmir Ayupov } 53*e903671bSAmir Ayupov } catch (ExcG) { 54*e903671bSAmir Ayupov printf("caught ExcG\n"); 55*e903671bSAmir Ayupov } 56*e903671bSAmir Ayupov } 57*e903671bSAmir Ayupov 58*e903671bSAmir Ayupov return 0; 59*e903671bSAmir Ayupov } 60