2
2
# pragma GCC diagnostic push
3
3
# pragma GCC diagnostic ignored "-Wnewline-eof"
4
4
#endif
5
+ #if defined(__GNUC__ ) || defined(__clang__ )
6
+ # pragma GCC diagnostic push
7
+ # pragma GCC diagnostic ignored "-Wsign-conversion"
8
+ #endif
5
9
6
10
#include "pythoncapi_compat.h"
7
11
8
12
#define PY_SSIZE_T_CLEAN
9
13
#include <Python.h>
10
14
15
+ #if defined(__GNUC__ ) || defined(__clang__ )
16
+ # pragma GCC diagnostic pop
17
+ #endif
11
18
#if defined(__clang__ )
12
19
# pragma GCC diagnostic pop
13
20
#endif
@@ -39,7 +46,7 @@ _Thread_local gmp_global global = {
39
46
};
40
47
41
48
static MPZ_Object *
42
- MPZ_new (zz_size_t size )
49
+ MPZ_new (int64_t size )
43
50
{
44
51
MPZ_Object * res ;
45
52
@@ -233,7 +240,7 @@ MPZ_from_str(PyObject *obj, int base)
233
240
len -- ;
234
241
}
235
242
236
- zz_err ret = zz_from_str (str , len , (int8_t )base , & res -> z );
243
+ zz_err ret = zz_from_str (str , ( size_t ) len , (int8_t )base , & res -> z );
237
244
238
245
if (ret == ZZ_MEM ) {
239
246
/* LCOV_EXCL_START */
@@ -275,7 +282,7 @@ MPZ_from_int(PyObject *obj)
275
282
}
276
283
if (long_export .digits ) {
277
284
res = MPZ_new (0 );
278
- if (!res || zz_import (long_export .ndigits ,
285
+ if (!res || zz_import (( size_t ) long_export .ndigits ,
279
286
long_export .digits , * int_layout , & res -> z ))
280
287
{
281
288
return (MPZ_Object * )PyErr_NoMemory (); /* LCOV_EXCL_LINE */
@@ -332,7 +339,8 @@ MPZ_to_int(MPZ_Object *u)
332
339
size_t size = (zz_bitlen (& u -> z ) + int_layout -> bits_per_digit
333
340
- 1 )/int_layout -> bits_per_digit ;
334
341
void * digits ;
335
- PyLongWriter * writer = PyLongWriter_Create (zz_isneg (& u -> z ), size , & digits );
342
+ PyLongWriter * writer = PyLongWriter_Create (zz_isneg (& u -> z ),
343
+ (Py_ssize_t )size , & digits );
336
344
337
345
if (!writer ) {
338
346
return NULL ; /* LCOV_EXCL_LINE */
@@ -354,7 +362,7 @@ MPZ_to_int(MPZ_Object *u)
354
362
}
355
363
356
364
static void
357
- revstr (unsigned char * s , size_t l , size_t r )
365
+ revstr (unsigned char * s , Py_ssize_t l , Py_ssize_t r )
358
366
{
359
367
while (l < r ) {
360
368
unsigned char tmp = s [l ];
@@ -376,7 +384,7 @@ MPZ_to_bytes(MPZ_Object *u, Py_ssize_t length, int is_little, int is_signed)
376
384
}
377
385
378
386
uint8_t * buffer = (uint8_t * )PyBytes_AS_STRING (bytes );
379
- zz_err ret = zz_to_bytes (& u -> z , length , is_signed , & buffer );
387
+ zz_err ret = zz_to_bytes (& u -> z , ( size_t ) length , is_signed , & buffer );
380
388
381
389
if (ret == ZZ_OK ) {
382
390
if (is_little && length ) {
@@ -415,22 +423,22 @@ MPZ_from_bytes(PyObject *obj, int is_little, int is_signed)
415
423
is_little = 0 ;
416
424
}
417
425
if (is_little ) {
418
- uint8_t * tmp = malloc (length );
426
+ uint8_t * tmp = malloc (( size_t ) length );
419
427
420
428
if (!tmp ) {
421
429
/* LCOV_EXCL_START */
422
430
Py_DECREF (bytes );
423
431
return (MPZ_Object * )PyErr_NoMemory ();
424
432
/* LCOV_EXCL_STOP */
425
433
}
426
- memcpy (tmp , buffer , length );
434
+ memcpy (tmp , buffer , ( size_t ) length );
427
435
revstr (tmp , 0 , length - 1 );
428
436
buffer = tmp ;
429
437
}
430
438
431
439
MPZ_Object * res = MPZ_new (0 );
432
440
433
- if (!res || zz_from_bytes (buffer , length , is_signed , & res -> z )) {
441
+ if (!res || zz_from_bytes (buffer , ( size_t ) length , is_signed , & res -> z )) {
434
442
/* LCOV_EXCL_START */
435
443
Py_DECREF (bytes );
436
444
if (is_little ) {
@@ -464,7 +472,14 @@ PyUnicode_TransformDecimalAndSpaceToASCII(PyObject *unicode)
464
472
}
465
473
466
474
Py_UCS1 * out = PyUnicode_1BYTE_DATA (result );
475
+ #if defined(__GNUC__ ) || defined(__clang__ )
476
+ # pragma GCC diagnostic push
477
+ # pragma GCC diagnostic ignored "-Wsign-conversion"
478
+ #endif
467
479
int kind = PyUnicode_KIND (unicode );
480
+ #if defined(__GNUC__ ) || defined(__clang__ )
481
+ # pragma GCC diagnostic pop
482
+ #endif
468
483
const void * data = PyUnicode_DATA (unicode );
469
484
470
485
for (Py_ssize_t i = 0 ; i < len ; ++ i ) {
@@ -864,7 +879,7 @@ hash(PyObject *self)
864
879
Py_hash_t r ;
865
880
866
881
assert (- (uint64_t )INT64_MIN > PyHASH_MODULUS );
867
- (void )zz_rem_u64 (& u -> z , PyHASH_MODULUS , (uint64_t * )& r );
882
+ (void )zz_rem_u64 (& u -> z , ( uint64_t ) PyHASH_MODULUS , (uint64_t * )& r );
868
883
if (negative ) {
869
884
(void )zz_neg (& u -> z , & u -> z );
870
885
r = - r ;
@@ -1223,7 +1238,9 @@ power(PyObject *self, PyObject *other, PyObject *module)
1223
1238
1224
1239
int64_t exp ;
1225
1240
1226
- if (!res || zz_to_i64 (& v -> z , & exp ) || zz_pow (& u -> z , exp , & res -> z )) {
1241
+ if (!res || zz_to_i64 (& v -> z , & exp )
1242
+ || zz_pow (& u -> z , (uint64_t )exp , & res -> z ))
1243
+ {
1227
1244
/* LCOV_EXCL_START */
1228
1245
Py_CLEAR (res );
1229
1246
PyErr_SetNone (PyExc_MemoryError );
@@ -1624,11 +1641,11 @@ static PyObject *
1624
1641
__reduce_ex__ (PyObject * self , PyObject * Py_UNUSED (args ))
1625
1642
{
1626
1643
MPZ_Object * u = (MPZ_Object * )self ;
1627
- Py_ssize_t len = zz_bitlen (& u -> z );
1644
+ zz_bitcnt_t len = zz_bitlen (& u -> z );
1628
1645
1629
1646
return Py_BuildValue ("N(N)" ,
1630
1647
PyObject_GetAttrString (self , "_from_bytes" ),
1631
- MPZ_to_bytes (u , (len + 7 )/8 + 1 , 0 , 1 ));
1648
+ MPZ_to_bytes (u , (Py_ssize_t )( len + 7 )/8 + 1 , 0 , 1 ));
1632
1649
}
1633
1650
1634
1651
static PyObject *
@@ -1637,7 +1654,7 @@ __sizeof__(PyObject *self, PyObject *Py_UNUSED(ignored))
1637
1654
MPZ_Object * u = (MPZ_Object * )self ;
1638
1655
1639
1656
return PyLong_FromSize_t (sizeof (MPZ_Object )
1640
- + (u -> z ).alloc * sizeof (zz_limb_t ));
1657
+ + (unsigned int )( u -> z ).alloc * sizeof (zz_limb_t ));
1641
1658
}
1642
1659
1643
1660
static PyObject *
@@ -2046,7 +2063,7 @@ gmp_isqrt_rem(PyObject *Py_UNUSED(module), PyObject *arg)
2046
2063
goto err; \
2047
2064
} \
2048
2065
Py_XDECREF(x); \
2049
- if (zz_##name(n, &res->z)) { \
2066
+ if (zz_##name((uint64_t) n, &res->z)) { \
2050
2067
/* LCOV_EXCL_START */ \
2051
2068
PyErr_NoMemory (); \
2052
2069
goto err ; \
@@ -2068,7 +2085,7 @@ get_round_mode(PyObject *rndstr)
2068
2085
if (!PyUnicode_Check (rndstr )) {
2069
2086
invalid :
2070
2087
PyErr_SetString (PyExc_ValueError , "invalid rounding mode specified" );
2071
- return -1 ;
2088
+ return ( zz_rnd ) - 1 ;
2072
2089
}
2073
2090
2074
2091
Py_UCS4 rndchr = PyUnicode_READ_CHAR (rndstr , 0 );
0 commit comments