From: Victor Stinner Date: Tue, 29 Oct 2013 18:59:31 +0000 (+0100) Subject: Issue #19433: test_capi: check signness of some C types X-Git-Tag: v3.4.0b1~480^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f866f97ca8fed17cb10c0fd06b65b75b33843ff9;p=python Issue #19433: test_capi: check signness of some C types --- diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 7e27ec4779..33624542ac 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -67,38 +67,62 @@ test_config(PyObject *self) static PyObject* test_sizeof_c_types(PyObject *self) { -#define CHECK_SIZEOF(EXPECTED, TYPE) \ +#define CHECK_SIZEOF(TYPE, EXPECTED) \ if (EXPECTED != sizeof(TYPE)) { \ PyErr_Format(TestError, \ "sizeof(%s) = %u instead of %u", \ #TYPE, sizeof(TYPE), EXPECTED); \ return (PyObject*)NULL; \ } +#define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0) +#define CHECK_SIGNNESS(TYPE, SIGNED) \ + if (IS_SIGNED(TYPE) != SIGNED) { \ + PyErr_Format(TestError, \ + "%s signness is, instead of %i", \ + #TYPE, IS_SIGNED(TYPE), SIGNED); \ + return (PyObject*)NULL; \ + } /* integer types */ - CHECK_SIZEOF(1, Py_UCS1); - CHECK_SIZEOF(2, Py_UCS2); - CHECK_SIZEOF(4, Py_UCS4); + CHECK_SIZEOF(Py_UCS1, 1); + CHECK_SIZEOF(Py_UCS2, 2); + CHECK_SIZEOF(Py_UCS4, 4); + CHECK_SIGNNESS(Py_UCS1, 0); + CHECK_SIGNNESS(Py_UCS2, 0); + CHECK_SIGNNESS(Py_UCS4, 0); #ifdef HAVE_INT32_T - CHECK_SIZEOF(4, PY_INT32_T); + CHECK_SIZEOF(PY_INT32_T, 4); + CHECK_SIGNNESS(PY_INT32_T, 1); #endif #ifdef HAVE_UINT32_T - CHECK_SIZEOF(4, PY_UINT32_T); + CHECK_SIZEOF(PY_UINT32_T, 4); + CHECK_SIGNNESS(PY_UINT32_T, 0); #endif #ifdef HAVE_INT64_T - CHECK_SIZEOF(8, PY_INT64_T); + CHECK_SIZEOF(PY_INT64_T, 8); + CHECK_SIGNNESS(PY_INT64_T, 1); #endif #ifdef HAVE_UINT64_T - CHECK_SIZEOF(8, PY_UINT64_T); + CHECK_SIZEOF(PY_UINT64_T, 8); + CHECK_SIGNNESS(PY_UINT64_T, 0); #endif /* pointer/size types */ - CHECK_SIZEOF(sizeof(void *), size_t); - CHECK_SIZEOF(sizeof(void *), Py_ssize_t); + CHECK_SIZEOF(size_t, sizeof(void *)); + CHECK_SIGNNESS(size_t, 0); + CHECK_SIZEOF(Py_ssize_t, sizeof(void *)); + CHECK_SIGNNESS(Py_ssize_t, 1); + + CHECK_SIZEOF(Py_uintptr_t, sizeof(void *)); + CHECK_SIGNNESS(Py_uintptr_t, 0); + CHECK_SIZEOF(Py_intptr_t, sizeof(void *)); + CHECK_SIGNNESS(Py_intptr_t, 1); Py_INCREF(Py_None); return Py_None; +#undef IS_SIGNED +#undef CHECK_SIGNESS #undef CHECK_SIZEOF }