12d97f0f2SAmir Ayupov // Test that we can have a statement that throws in hot cold 22d97f0f2SAmir Ayupov // and a landing pad in cold code. 32d97f0f2SAmir Ayupov // 42d97f0f2SAmir Ayupov // Record performance data with no args. Run test with 2 args. 52d97f0f2SAmir Ayupov 62d97f0f2SAmir Ayupov #include <stdio.h> 72d97f0f2SAmir Ayupov #include <stdint.h> 82d97f0f2SAmir Ayupov foo()92d97f0f2SAmir Ayupovint foo() 102d97f0f2SAmir Ayupov { 112d97f0f2SAmir Ayupov return 0; 122d97f0f2SAmir Ayupov } 132d97f0f2SAmir Ayupov bar(int a)142d97f0f2SAmir Ayupovvoid bar(int a) { 152d97f0f2SAmir Ayupov if (a > 2 && a % 2) 162d97f0f2SAmir Ayupov throw new int(); 172d97f0f2SAmir Ayupov } 182d97f0f2SAmir Ayupov filter_only()192d97f0f2SAmir Ayupovvoid filter_only(){ 202d97f0f2SAmir Ayupov foo(); 212d97f0f2SAmir Ayupov } 222d97f0f2SAmir Ayupov main(int argc,char ** argv)232d97f0f2SAmir Ayupovint main(int argc, char **argv) 242d97f0f2SAmir Ayupov { 252d97f0f2SAmir Ayupov unsigned r = 0; 262d97f0f2SAmir Ayupov 27*f263a66bSMaksim Panchenko uint64_t limit = (argc >= 2 ? 10 : 5000); 282d97f0f2SAmir Ayupov for (uint64_t i = 0; i < limit; ++i) { 292d97f0f2SAmir Ayupov i += foo(); 302d97f0f2SAmir Ayupov try { 312d97f0f2SAmir Ayupov bar(argc); 322d97f0f2SAmir Ayupov try { 332d97f0f2SAmir Ayupov if (argc >= 2) 342d97f0f2SAmir Ayupov throw new int(); 352d97f0f2SAmir Ayupov } catch (...) { 362d97f0f2SAmir Ayupov printf("catch 2\n"); 372d97f0f2SAmir Ayupov throw new int(); 382d97f0f2SAmir Ayupov } 392d97f0f2SAmir Ayupov } catch (...) { 402d97f0f2SAmir Ayupov printf("catch 1\n"); 412d97f0f2SAmir Ayupov } 422d97f0f2SAmir Ayupov } 432d97f0f2SAmir Ayupov 442d97f0f2SAmir Ayupov return 0; 452d97f0f2SAmir Ayupov } 46