This prevents clang from emitting 'invoke's and catch statements.
Things previously mostly worked thanks to TryToMarkNoThrow() in
CodeGenFunction. But this is not a proper IPO, and it doesn't properly
handle cases like mutual recursion.
Fixes bug 30593.
I would check for call void @_Z1fv here, and make foo noexcept. The noexcept is useful because it forces us to essentially emit try { ... } catch (...) { std::terminate(); } around the whole function, but we probably allow noexcept.