Commit a73cb8a6 authored by Larry Hastings's avatar Larry Hastings

Issue #22120: For functions using an unsigned integer return converter,

Argument Clinic now generates a cast to that type for the comparison
to -1 in the generated code.  (This supresses a compilation warning.)
parent 57acacdf
...@@ -882,6 +882,10 @@ Tests ...@@ -882,6 +882,10 @@ Tests
Tools/Demos Tools/Demos
----------- -----------
- Issue #22120: For functions using an unsigned integer return converter,
Argument Clinic now generates a cast to that type for the comparison
to -1 in the generated code. (This supresses a compilation warning.)
- Issue #18974: Tools/scripts/diff.py now uses argparse instead of optparse. - Issue #18974: Tools/scripts/diff.py now uses argparse instead of optparse.
- Issue #21906: Make Tools/scripts/md5sum.py work in Python 3. - Issue #21906: Make Tools/scripts/md5sum.py work in Python 3.
......
...@@ -320,7 +320,7 @@ binascii_crc32(PyModuleDef *module, PyObject *args) ...@@ -320,7 +320,7 @@ binascii_crc32(PyModuleDef *module, PyObject *args)
&data, &crc)) &data, &crc))
goto exit; goto exit;
_return_value = binascii_crc32_impl(module, &data, crc); _return_value = binascii_crc32_impl(module, &data, crc);
if ((_return_value == -1) && PyErr_Occurred()) if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
goto exit; goto exit;
return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
...@@ -475,4 +475,4 @@ exit: ...@@ -475,4 +475,4 @@ exit:
return return_value; return return_value;
} }
/*[clinic end generated code: output=68e2bcc6956b6213 input=a9049054013a1b77]*/ /*[clinic end generated code: output=53cd6b379c745220 input=a9049054013a1b77]*/
...@@ -12465,7 +12465,7 @@ os_major(PyModuleDef *module, PyObject *args) ...@@ -12465,7 +12465,7 @@ os_major(PyModuleDef *module, PyObject *args)
&device)) &device))
goto exit; goto exit;
_return_value = os_major_impl(module, device); _return_value = os_major_impl(module, device);
if ((_return_value == -1) && PyErr_Occurred()) if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
goto exit; goto exit;
return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
...@@ -12475,7 +12475,7 @@ exit: ...@@ -12475,7 +12475,7 @@ exit:
static unsigned int static unsigned int
os_major_impl(PyModuleDef *module, int device) os_major_impl(PyModuleDef *module, int device)
/*[clinic end generated code: output=f60d3cc3d5d20325 input=ea48820b7e10d310]*/ /*[clinic end generated code: output=52e6743300dcf4ad input=ea48820b7e10d310]*/
{ {
return major(device); return major(device);
} }
...@@ -12514,7 +12514,7 @@ os_minor(PyModuleDef *module, PyObject *args) ...@@ -12514,7 +12514,7 @@ os_minor(PyModuleDef *module, PyObject *args)
&device)) &device))
goto exit; goto exit;
_return_value = os_minor_impl(module, device); _return_value = os_minor_impl(module, device);
if ((_return_value == -1) && PyErr_Occurred()) if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
goto exit; goto exit;
return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
...@@ -12524,7 +12524,7 @@ exit: ...@@ -12524,7 +12524,7 @@ exit:
static unsigned int static unsigned int
os_minor_impl(PyModuleDef *module, int device) os_minor_impl(PyModuleDef *module, int device)
/*[clinic end generated code: output=71eca1d5149c2a07 input=089733ebbf9754e8]*/ /*[clinic end generated code: output=aebe4bd7f455b755 input=089733ebbf9754e8]*/
{ {
return minor(device); return minor(device);
} }
...@@ -12565,7 +12565,7 @@ os_makedev(PyModuleDef *module, PyObject *args) ...@@ -12565,7 +12565,7 @@ os_makedev(PyModuleDef *module, PyObject *args)
&major, &minor)) &major, &minor))
goto exit; goto exit;
_return_value = os_makedev_impl(module, major, minor); _return_value = os_makedev_impl(module, major, minor);
if ((_return_value == -1) && PyErr_Occurred()) if ((_return_value == (unsigned int)-1) && PyErr_Occurred())
goto exit; goto exit;
return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
...@@ -12575,7 +12575,7 @@ exit: ...@@ -12575,7 +12575,7 @@ exit:
static unsigned int static unsigned int
os_makedev_impl(PyModuleDef *module, int major, int minor) os_makedev_impl(PyModuleDef *module, int major, int minor)
/*[clinic end generated code: output=e04dc5723a98cd3b input=f55bf7cffb028a08]*/ /*[clinic end generated code: output=5cb79d9c9eac58b0 input=f55bf7cffb028a08]*/
{ {
return makedev(major, minor); return makedev(major, minor);
} }
......
...@@ -2865,10 +2865,11 @@ class long_return_converter(CReturnConverter): ...@@ -2865,10 +2865,11 @@ class long_return_converter(CReturnConverter):
type = 'long' type = 'long'
conversion_fn = 'PyLong_FromLong' conversion_fn = 'PyLong_FromLong'
cast = '' cast = ''
unsigned_cast = ''
def render(self, function, data): def render(self, function, data):
self.declare(data) self.declare(data)
self.err_occurred_if("_return_value == -1", data) self.err_occurred_if("_return_value == {}-1".format(self.unsigned_cast), data)
data.return_conversion.append( data.return_conversion.append(
''.join(('return_value = ', self.conversion_fn, '(', self.cast, '_return_value);\n'))) ''.join(('return_value = ', self.conversion_fn, '(', self.cast, '_return_value);\n')))
...@@ -2889,10 +2890,12 @@ class init_return_converter(long_return_converter): ...@@ -2889,10 +2890,12 @@ class init_return_converter(long_return_converter):
class unsigned_long_return_converter(long_return_converter): class unsigned_long_return_converter(long_return_converter):
type = 'unsigned long' type = 'unsigned long'
conversion_fn = 'PyLong_FromUnsignedLong' conversion_fn = 'PyLong_FromUnsignedLong'
unsigned_cast = '(unsigned long)'
class unsigned_int_return_converter(unsigned_long_return_converter): class unsigned_int_return_converter(unsigned_long_return_converter):
type = 'unsigned int' type = 'unsigned int'
cast = '(unsigned long)' cast = '(unsigned long)'
unsigned_cast = '(unsigned int)'
class Py_ssize_t_return_converter(long_return_converter): class Py_ssize_t_return_converter(long_return_converter):
type = 'Py_ssize_t' type = 'Py_ssize_t'
...@@ -2901,6 +2904,7 @@ class Py_ssize_t_return_converter(long_return_converter): ...@@ -2901,6 +2904,7 @@ class Py_ssize_t_return_converter(long_return_converter):
class size_t_return_converter(long_return_converter): class size_t_return_converter(long_return_converter):
type = 'size_t' type = 'size_t'
conversion_fn = 'PyLong_FromSize_t' conversion_fn = 'PyLong_FromSize_t'
unsigned_cast = '(size_t)'
class double_return_converter(CReturnConverter): class double_return_converter(CReturnConverter):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment