| // Test that we can have a statement that throws in hot cold |
| // and a landing pad in cold code. |
| // |
| // Record performance data with no args. Run test with 2 args. |
| |
| #include <stdint.h> |
| #include <stdio.h> |
| |
| int foo() { return 0; } |
| |
| void bar(int a) { |
| if (a > 2 && a % 2) |
| throw new int(); |
| } |
| |
| void filter_only() { foo(); } |
| |
| int main(int argc, char **argv) { |
| unsigned r = 0; |
| |
| uint64_t limit = (argc >= 2 ? 10 : 5000); |
| for (uint64_t i = 0; i < limit; ++i) { |
| i += foo(); |
| try { |
| bar(argc); |
| try { |
| if (argc >= 2) |
| throw new int(); |
| } catch (...) { |
| printf("catch 2\n"); |
| throw new int(); |
| } |
| } catch (...) { |
| printf("catch 1\n"); |
| } |
| } |
| |
| return 0; |
| } |