mirror of
https://github.com/python/cpython.git
synced 2026-05-06 12:49:07 -04:00
gh-141563: Add missing cast to _PyDateTime_IMPORT() (#144667)
Fix compilation on C++. Add test on PyDateTime_IMPORT in test_cext and test_cppext.
This commit is contained in:
+1
-1
@@ -198,7 +198,7 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL;
|
||||
|
||||
static inline PyDateTime_CAPI *
|
||||
_PyDateTime_IMPORT(void) {
|
||||
PyDateTime_CAPI *val = _Py_atomic_load_ptr(&PyDateTimeAPI);
|
||||
PyDateTime_CAPI *val = (PyDateTime_CAPI *)_Py_atomic_load_ptr(&PyDateTimeAPI);
|
||||
if (val == NULL) {
|
||||
PyDateTime_CAPI *capi = (PyDateTime_CAPI *)PyCapsule_Import(
|
||||
PyDateTime_CAPSULE_NAME, 0);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#endif
|
||||
|
||||
#include "Python.h"
|
||||
#include "datetime.h"
|
||||
|
||||
#ifdef TEST_INTERNAL_C_API
|
||||
// gh-135906: Check for compiler warnings in the internal C API.
|
||||
@@ -50,8 +51,21 @@ _testcext_add(PyObject *Py_UNUSED(module), PyObject *args)
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
test_datetime(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
|
||||
{
|
||||
PyDateTime_IMPORT;
|
||||
if (PyErr_Occurred()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static PyMethodDef _testcext_methods[] = {
|
||||
{"add", _testcext_add, METH_VARARGS, _testcext_add_doc},
|
||||
{"test_datetime", test_datetime, METH_NOARGS, NULL},
|
||||
{NULL, NULL, 0, NULL} // sentinel
|
||||
};
|
||||
|
||||
@@ -65,12 +79,18 @@ _testcext_exec(
|
||||
#endif
|
||||
)
|
||||
{
|
||||
PyObject *result;
|
||||
|
||||
#ifdef __STDC_VERSION__
|
||||
if (PyModule_AddIntMacro(module, __STDC_VERSION__) < 0) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
result = PyObject_CallMethod(module, "test_datetime", "");
|
||||
if (!result) return -1;
|
||||
Py_DECREF(result);
|
||||
|
||||
// test Py_BUILD_ASSERT() and Py_BUILD_ASSERT_EXPR()
|
||||
Py_BUILD_ASSERT(sizeof(int) == sizeof(unsigned int));
|
||||
assert(Py_BUILD_ASSERT_EXPR(sizeof(int) == sizeof(unsigned int)) == 0);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#endif
|
||||
|
||||
#include "Python.h"
|
||||
#include "datetime.h"
|
||||
|
||||
#ifdef TEST_INTERNAL_C_API
|
||||
// gh-135906: Check for compiler warnings in the internal C API
|
||||
@@ -228,11 +229,23 @@ test_virtual_object(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
test_datetime(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
|
||||
{
|
||||
PyDateTime_IMPORT;
|
||||
if (PyErr_Occurred()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
static PyMethodDef _testcppext_methods[] = {
|
||||
{"add", _testcppext_add, METH_VARARGS, _testcppext_add_doc},
|
||||
{"test_api_casts", test_api_casts, METH_NOARGS, _Py_NULL},
|
||||
{"test_unicode", test_unicode, METH_NOARGS, _Py_NULL},
|
||||
{"test_virtual_object", test_virtual_object, METH_NOARGS, _Py_NULL},
|
||||
{"test_datetime", test_datetime, METH_NOARGS, _Py_NULL},
|
||||
// Note: _testcppext_exec currently runs all test functions directly.
|
||||
// When adding a new one, add a call there.
|
||||
|
||||
@@ -261,6 +274,10 @@ _testcppext_exec(PyObject *module)
|
||||
if (!result) return -1;
|
||||
Py_DECREF(result);
|
||||
|
||||
result = PyObject_CallMethod(module, "test_datetime", "");
|
||||
if (!result) return -1;
|
||||
Py_DECREF(result);
|
||||
|
||||
// test Py_BUILD_ASSERT() and Py_BUILD_ASSERT_EXPR()
|
||||
Py_BUILD_ASSERT(sizeof(int) == sizeof(unsigned int));
|
||||
assert(Py_BUILD_ASSERT_EXPR(sizeof(int) == sizeof(unsigned int)) == 0);
|
||||
|
||||
Reference in New Issue
Block a user