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