diff options
-rw-r--r-- | Include/pyport.h | 15 | ||||
-rw-r--r-- | Objects/abstract.c | 4 |
2 files changed, 17 insertions, 2 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index def2975..03c664f 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -507,7 +507,7 @@ extern "C" { * locality. * * Usage: - * int _Py_HOT_FUNCTION x() { return 3; } + * int _Py_HOT_FUNCTION x(void) { return 3; } * * Issue #28618: This attribute must not be abused, otherwise it can have a * negative effect on performance. Only the functions were Python spend most of @@ -521,6 +521,19 @@ extern "C" { #define _Py_HOT_FUNCTION #endif +/* _Py_NO_INLINE + * Disable inlining on a function. For example, it helps to reduce the C stack + * consumption. + * + * Usage: + * int _Py_NO_INLINE x(void) { return 3; } + */ +#if defined(__GNUC__) || defined(__clang__) +# define _Py_NO_INLINE __attribute__((noinline)) +#else +# define _Py_NO_INLINE +#endif + /************************************************************************** Prototypes that are missing from the standard include files on some systems (and possibly only some versions of such systems.) diff --git a/Objects/abstract.c b/Objects/abstract.c index 93bf87f..5726160 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2256,7 +2256,9 @@ PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs) return _Py_CheckFunctionResult(callable, result, NULL); } -PyObject* +/* Issue #29234: Inlining _PyStack_AsTuple() into callers increases their + stack consumption, Disable inlining to optimize the stack consumption. */ +PyObject* _Py_NO_INLINE _PyStack_AsTuple(PyObject **stack, Py_ssize_t nargs) { PyObject *args; |