diff options
author | Armin Rigo <arigo@tunes.org> | 2018-02-20 07:37:04 +0100 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2018-02-20 07:37:04 +0100 |
commit | b27eee92a3ec4a44808d428057ba1aceac48c589 (patch) | |
tree | 802d792eae45ebeea53c4c40f8ad76ca181899aa | |
parent | 37680f9f26579c30a75bee884d764dc3b511d710 (diff) | |
download | cffi-b27eee92a3ec4a44808d428057ba1aceac48c589.tar.gz |
silence a gcc warning shown in some (recent?) versions of gcc
-rw-r--r-- | c/_cffi_backend.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c index 62e320f..ec263ba 100644 --- a/c/_cffi_backend.c +++ b/c/_cffi_backend.c @@ -3794,27 +3794,29 @@ static CDataObject *cast_to_integer_or_char(CTypeDescrObject *ct, PyObject *ob) static int check_bytes_for_float_compatible(PyObject *io, double *out_value) { if (PyBytes_Check(io)) { - if (PyBytes_GET_SIZE(io) != 1) { - Py_DECREF(io); - return -1; - } + if (PyBytes_GET_SIZE(io) != 1) + goto error; *out_value = (unsigned char)PyBytes_AS_STRING(io)[0]; return 1; } else if (PyUnicode_Check(io)) { char ignored[80]; cffi_char32_t ordinal; - if (_my_PyUnicode_AsSingleChar32(io, &ordinal, ignored) < 0) { - Py_DECREF(io); - return -1; - } + if (_my_PyUnicode_AsSingleChar32(io, &ordinal, ignored) < 0) + goto error; /* the signness of the 32-bit version of wide chars should not * matter here, because 'ordinal' comes from a normal Python * unicode string */ *out_value = ordinal; return 1; } + *out_value = 0; /* silence a gcc warning if this function is inlined */ return 0; + + error: + Py_DECREF(io); + *out_value = 0; /* silence a gcc warning if this function is inlined */ + return -1; } static PyObject *do_cast(CTypeDescrObject *ct, PyObject *ob) |