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 Ayupovvoid 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 Ayupovvoid 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 Ayupovint 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