diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index c17ffd8..27f7c4e 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -911,6 +911,13 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) } #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION) + +/* GCC 5 may optimize this as a tail call, which will + result in an infinite loop, not a stack overflow */ +#ifdef __GNUC__ +#pragma GCC push_options +#pragma GCC optimize ("O0") +#endif static void* stack_overflow(void *min_sp, void *max_sp, size_t *depth) { @@ -924,6 +931,9 @@ stack_overflow(void *min_sp, void *max_sp, size_t *depth) buffer[4095] = 0; return stack_overflow(min_sp, max_sp, depth); } +#ifdef __GNUC__ +#pragma GCC pop_options +#endif static PyObject * faulthandler_stack_overflow(PyObject *self)