#include class ExcA {}; class ExcB {}; class ExcC {}; class ExcD {}; class ExcE {}; class ExcF {}; class ExcG {}; void foo(int a) { if (a > 1) throw ExcG(); else throw ExcC(); } void never_throws() throw () { printf("this statement is cold and should be outlined\n"); } int main(int argc, char **argv) { for (unsigned i = 0; i < 1000; ++i) { try { if (argc == 2) { never_throws(); // should be cold } try { if (argc == 2) { never_throws(); // should be cold } throw ExcA(); } catch (ExcA) { printf("catch 2\n"); throw new int(); } } catch (...) { printf("catch 1\n"); } try { try { foo(argc); } catch (ExcC) { printf("caught ExcC\n"); } } catch (ExcG) { printf("caught ExcG\n"); } } return 0; }