1*2d97f0f2SAmir Ayupov // Test that we can have a statement that throws in hot cold 2*2d97f0f2SAmir Ayupov // and a landing pad in cold code. 3*2d97f0f2SAmir Ayupov // 4*2d97f0f2SAmir Ayupov // Record performance data with no args. Run test with 2 args. 5*2d97f0f2SAmir Ayupov 6*2d97f0f2SAmir Ayupov #include <stdio.h> 7*2d97f0f2SAmir Ayupov #include <stdint.h> 8*2d97f0f2SAmir Ayupov 9*2d97f0f2SAmir Ayupov int foo() 10*2d97f0f2SAmir Ayupov { 11*2d97f0f2SAmir Ayupov return 0; 12*2d97f0f2SAmir Ayupov } 13*2d97f0f2SAmir Ayupov 14*2d97f0f2SAmir Ayupov void bar(int a) { 15*2d97f0f2SAmir Ayupov if (a > 2 && a % 2) 16*2d97f0f2SAmir Ayupov throw new int(); 17*2d97f0f2SAmir Ayupov } 18*2d97f0f2SAmir Ayupov 19*2d97f0f2SAmir Ayupov void filter_only(){ 20*2d97f0f2SAmir Ayupov foo(); 21*2d97f0f2SAmir Ayupov } 22*2d97f0f2SAmir Ayupov 23*2d97f0f2SAmir Ayupov int main(int argc, char **argv) 24*2d97f0f2SAmir Ayupov { 25*2d97f0f2SAmir Ayupov unsigned r = 0; 26*2d97f0f2SAmir Ayupov 27*2d97f0f2SAmir Ayupov uint64_t limit = (argc >= 2 ? 10 : 500000000); 28*2d97f0f2SAmir Ayupov for (uint64_t i = 0; i < limit; ++i) { 29*2d97f0f2SAmir Ayupov i += foo(); 30*2d97f0f2SAmir Ayupov try { 31*2d97f0f2SAmir Ayupov bar(argc); 32*2d97f0f2SAmir Ayupov try { 33*2d97f0f2SAmir Ayupov if (argc >= 2) 34*2d97f0f2SAmir Ayupov throw new int(); 35*2d97f0f2SAmir Ayupov } catch (...) { 36*2d97f0f2SAmir Ayupov printf("catch 2\n"); 37*2d97f0f2SAmir Ayupov throw new int(); 38*2d97f0f2SAmir Ayupov } 39*2d97f0f2SAmir Ayupov } catch (...) { 40*2d97f0f2SAmir Ayupov printf("catch 1\n"); 41*2d97f0f2SAmir Ayupov } 42*2d97f0f2SAmir Ayupov } 43*2d97f0f2SAmir Ayupov 44*2d97f0f2SAmir Ayupov return 0; 45*2d97f0f2SAmir Ayupov } 46