diff --git a/Include/abstract.h b/Include/abstract.h
index 43bf251..961279d 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -177,20 +177,23 @@
     PyObject **values,
     PyObject *kwnames);
 
-/* Convert (args, nargs, kwargs) into a (stack, nargs, kwnames).
+/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
 
-   Return a new stack which should be released by PyMem_Free(), or return
-   args unchanged if kwargs is NULL or an empty dictionary.
+   Return 0 on success, raise an exception and return -1 on error.
+
+   Write the new stack into *p_stack. If *p_stack is differen than args, it
+   must be released by PyMem_Free().
 
    The stack uses borrowed references.
 
    The type of keyword keys is not checked, these checks should be done
    later (ex: _PyArg_ParseStackAndKeywords). */
-PyAPI_FUNC(PyObject **) _PyStack_UnpackDict(
+PyAPI_FUNC(int) _PyStack_UnpackDict(
     PyObject **args,
     Py_ssize_t nargs,
     PyObject *kwargs,
-    PyObject **kwnames,
+    PyObject ***p_stack,
+    PyObject **p_kwnames,
     PyObject *func);
 
 /* Suggested size (number of positional arguments) for arrays of PyObject*
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 48fdf65..ee50f02 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2421,9 +2421,9 @@
     return kwdict;
 }
 
-PyObject **
+int
 _PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs,
-                    PyObject **p_kwnames, PyObject *func)
+                    PyObject ***p_stack, PyObject **p_kwnames, PyObject *func)
 {
     PyObject **stack, **kwstack;
     Py_ssize_t nkwargs;
@@ -2435,25 +2435,26 @@
     assert(kwargs == NULL || PyDict_CheckExact(kwargs));
 
     if (kwargs == NULL || (nkwargs = PyDict_GET_SIZE(kwargs)) == 0) {
+        *p_stack = args;
         *p_kwnames = NULL;
-        return args;
+        return 0;
     }
 
     if ((size_t)nargs > PY_SSIZE_T_MAX / sizeof(stack[0]) - (size_t)nkwargs) {
         PyErr_NoMemory();
-        return NULL;
+        return -1;
     }
 
     stack = PyMem_Malloc((nargs + nkwargs) * sizeof(stack[0]));
     if (stack == NULL) {
         PyErr_NoMemory();
-        return NULL;
+        return -1;
     }
 
     kwnames = PyTuple_New(nkwargs);
     if (kwnames == NULL) {
         PyMem_Free(stack);
-        return NULL;
+        return -1;
     }
 
     /* Copy position arguments (borrowed references) */
@@ -2472,8 +2473,9 @@
         i++;
     }
 
+    *p_stack = stack;
     *p_kwnames = kwnames;
-    return stack;
+    return 0;
 }
 
 PyObject *
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 1e9ad0d..7bff6a0 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -240,8 +240,8 @@
         PyObject *kwnames;
         _PyCFunctionFast fastmeth = (_PyCFunctionFast)meth;
 
-        stack = _PyStack_UnpackDict(args, nargs, kwargs, &kwnames, func_obj);
-        if (stack == NULL) {
+        if (_PyStack_UnpackDict(args, nargs, kwargs,
+                                &stack, &kwnames, func_obj) < 0) {
             return NULL;
         }
 
