diff --git a/Misc/NEWS.d/next/Build/2018-02-07-11-24-38.bpo-32616.o7mFJ3.rst b/Misc/NEWS.d/next/Build/2018-02-07-11-24-38.bpo-32616.o7mFJ3.rst new file mode 100644 index 00000000000000..cdddc2f2d909dc --- /dev/null +++ b/Misc/NEWS.d/next/Build/2018-02-07-11-24-38.bpo-32616.o7mFJ3.rst @@ -0,0 +1,2 @@ +Disable computed gotos by default for clang < 5.0. It caused significant +performance regression. diff --git a/Python/ceval.c b/Python/ceval.c index 4e4adc2d63dc1b..bae158dc1402b1 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -689,11 +689,19 @@ PyObject * PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) { #ifdef DYNAMIC_EXECUTION_PROFILE - #undef USE_COMPUTED_GOTOS + #undef USE_COMPUTED_GOTOS #endif #ifdef HAVE_COMPUTED_GOTOS #ifndef USE_COMPUTED_GOTOS - #define USE_COMPUTED_GOTOS 1 + #if defined(__clang__) && (__clang_major__ < 5) + /* Computed gotos caused significant performance regression + * with clang < 5.0. + * https://bugs.python.org/issue32616 + */ + #define USE_COMPUTED_GOTOS 0 + #else + #define USE_COMPUTED_GOTOS 1 + #endif #endif #else #if defined(USE_COMPUTED_GOTOS) && USE_COMPUTED_GOTOS