bpo-38631: Add _Py_NO_RETURN to functions calling Py_FatalError() (GH-18278)
Add _Py_NO_RETURN to functions calling Py_FatalError(): * _PyObject_AssertFailed() * dummy_dealloc() * faulthandler_fatal_error_thread() * none_dealloc() * notimplemented_dealloc()
This commit is contained in:
parent
17c68b8107
commit
2a4903fcce
|
@ -443,7 +443,7 @@ _PyObject_DebugTypeStats(FILE *out);
|
|||
NDEBUG against a Python built with NDEBUG defined.
|
||||
|
||||
msg, expr and function can be NULL. */
|
||||
PyAPI_FUNC(void) _PyObject_AssertFailed(
|
||||
PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed(
|
||||
PyObject *obj,
|
||||
const char *expr,
|
||||
const char *msg,
|
||||
|
|
|
@ -1065,24 +1065,10 @@ faulthandler_sigsegv(PyObject *self, PyObject *args)
|
|||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static void
|
||||
static void _Py_NO_RETURN
|
||||
faulthandler_fatal_error_thread(void *plock)
|
||||
{
|
||||
#ifndef __clang__
|
||||
PyThread_type_lock *lock = (PyThread_type_lock *)plock;
|
||||
#endif
|
||||
|
||||
Py_FatalError("in new thread");
|
||||
|
||||
#ifndef __clang__
|
||||
/* Issue #28152: Py_FatalError() is declared with
|
||||
__attribute__((__noreturn__)). GCC emits a warning without
|
||||
"PyThread_release_lock()" (compiler bug?), but Clang is smarter and
|
||||
emits a warning on the return. */
|
||||
|
||||
/* notify the caller that we are done */
|
||||
PyThread_release_lock(lock);
|
||||
#endif
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
|
|
@ -1646,7 +1646,7 @@ none_repr(PyObject *op)
|
|||
}
|
||||
|
||||
/* ARGUSED */
|
||||
static void
|
||||
static void _Py_NO_RETURN
|
||||
none_dealloc(PyObject* ignore)
|
||||
{
|
||||
/* This should never get called, but we also don't want to SEGV if
|
||||
|
@ -1784,7 +1784,7 @@ notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
|||
Py_RETURN_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
static void
|
||||
static void _Py_NO_RETURN
|
||||
notimplemented_dealloc(PyObject* ignore)
|
||||
{
|
||||
/* This should never get called, but we also don't want to SEGV if
|
||||
|
@ -2225,7 +2225,7 @@ _PyTrash_thread_destroy_chain(void)
|
|||
}
|
||||
|
||||
|
||||
void
|
||||
void _Py_NO_RETURN
|
||||
_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
|
||||
const char *file, int line, const char *function)
|
||||
{
|
||||
|
|
|
@ -2529,7 +2529,7 @@ dummy_repr(PyObject *op)
|
|||
return PyUnicode_FromString("<dummy key>");
|
||||
}
|
||||
|
||||
static void
|
||||
static void _Py_NO_RETURN
|
||||
dummy_dealloc(PyObject* ignore)
|
||||
{
|
||||
Py_FatalError("deallocating <dummy key>");
|
||||
|
|
Loading…
Reference in New Issue