8000 bpo-40943: Replace PY_FORMAT_SIZE_T with "z" (GH-20781) · python/cpython@d36cf5f · GitHub
[go: up one dir, main page]

Skip to content
< 8000 script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-1e75b15ae60a.js">

Commit d36cf5f

Browse files
authored
bpo-40943: Replace PY_FORMAT_SIZE_T with "z" (GH-20781)
The PEP 353, written in 2005, introduced PY_FORMAT_SIZE_T. Python no longer supports macOS 10.4 and Visual Studio 2010, but requires more recent macOS and Visual Studio versions. In 2020 with Python 3.10, it is now safe to use directly "%zu" to format size_t and "%zi" to format Py_ssize_t.
1 parent 24b8bad commit d36cf5f

File tree

11 files changed

+89
-101
lines changed

11 files changed

+89
-101
lines changed

Include/pyport.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ typedef int Py_ssize_clean_t;
131131
/* Smallest negative value of type Py_ssize_t. */
132132
#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
133133

134-
/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
134+
/* Macro kept for backward compatibility: use "z" in new code.
135+
*
136+
* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
135137
* format to convert an argument with the width of a size_t or Py_ssize_t.
136138
* C99 introduced "z" for this purpose, but old MSVCs had not supported it.
137139
* Since MSVC supports "z" since (at least) 2015, we can just use "z"

Modules/_pickle.c

Lines changed: 2 additions & 2 deletions
67ED
Original file line numberDiff line numberDiff line change
@@ -1715,7 +1715,7 @@ memo_get(PicklerObject *self, PyObject *key)
17151715
if (!self->bin) {
17161716
pdata[0] = GET;
17171717
PyOS_snprintf(pdata + 1, sizeof(pdata) - 1,
1718-
"%" PY_FORMAT_SIZE_T "d\n", *value);
1718+
"%zd\n", *value);
17191719
len = strlen(pdata);
17201720
}
17211721
else {
@@ -1772,7 +1772,7 @@ memo_put(PicklerObject *self, PyObject *obj)
17721772
else if (!self->bin) {
17731773
pdata[0] = PUT;
17741774
PyOS_snprintf(pdata + 1, sizeof(pdata) - 1,
1775-
"%" PY_FORMAT_SIZE_T "d\n", idx);
1775+
"%zd\n", idx);
17761776
len = strlen(pdata);
17771777
}
17781778
else {

Modules/_sre.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size)
211211
if (cursize < minsize) {
212212
void* stack;
213213
cursize = minsize+minsize/4+1024;
214-
TRACE(("allocate/grow stack %" PY_FORMAT_SIZE_T "d\n", cursize));
214+
TRACE(("allocate/grow stack %zd\n", cursize));
215215
stack = PyMem_REALLOC(state->data_stack, cursize);
216216
if (!stack) {
217217
data_stack_dealloc(state);

Modules/gcmodule.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,7 +1043,7 @@ show_stats_each_generations(GCState *gcstate)
10431043

10441044
for (int i = 0; i < NUM_GENERATIONS && pos < sizeof(buf); i++) {
10451045
pos += PyOS_snprintf(buf+pos, sizeof(buf)-pos,
1046-
" %"PY_FORMAT_SIZE_T"d",
1046+
" %zd",
10471047
gc_list_size(GEN_HEAD(gcstate, i)));
10481048
}
10491049

@@ -1290,8 +1290,7 @@ collect(PyThreadState *tstate, int generation,
12901290
if (gcstate->debug & DEBUG_STATS) {
12911291
double d = _PyTime_AsSecondsDouble(_PyTime_GetMonotonicClock() - t1);
12921292
PySys_WriteStderr(
1293-
"gc: done, %" PY_FORMAT_SIZE_T "d unreachable, "
1294-
"%" PY_FORMAT_SIZE_T "d uncollectable, %.4fs elapsed\n",
1293+
"gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
12951294
n+m, n, d);
12961295
}
12971296

Modules/sre_lib.h

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,12 @@ SRE(count)(SRE_STATE* state, const SRE_CODE* pattern, Py_ssize_t maxcount)
323323
if (!i)
324324
break;
325325
}
326-
TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
326+
TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
327327
(SRE_CHAR*) state->ptr - ptr));
328328
return (SRE_CHAR*) state->ptr - ptr;
329329
}
330330

331-
TRACE(("|%p|%p|COUNT %" PY_FORMAT_SIZE_T "d\n", pattern, ptr,
331+
TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
332332
ptr - (SRE_CHAR*) state->ptr));
333333
return ptr - (SRE_CHAR*) state->ptr;
334334
}
@@ -414,8 +414,7 @@ SRE(info)(SRE_STATE* state, const SRE_CODE* pattern)
414414
#define DATA_STACK_ALLOC(state, type, ptr) \
415415
do { \
416416
alloc_pos = state->data_stack_base; \
417-
TRACE(("allocating %s in %" PY_FORMAT_SIZE_T "d " \
418-
"(%" PY_FORMAT_SIZE_T "d)\n", \
417+
TRACE(("allocating %s in %zd (%zd)\n", \
419418
Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
420419
if (sizeof(type) > state->data_stack_size - alloc_pos) { \
421420
int j = data_stack_grow(state, sizeof(type)); \
@@ -429,14 +428,13 @@ do { \
429428

430429
#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
431430
do { \
432-
TRACE(("looking up %s at %" PY_FORMAT_SIZE_T "d\n", Py_STRINGIFY(type), pos)); \
431+
TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
433432
ptr = (type*)(state->data_stack+pos); \
434433
} while (0)
435434

436435
#define DATA_STACK_PUSH(state, data, size) \
437436
do { \
438-
TRACE(("copy data in %p to %" PY_FORMAT_SIZE_T "d " \
439-
"(%" PY_FORMAT_SIZE_T "d)\n", \
437+
TRACE(("copy data in %p to %zd (%zd)\n", \
440438
data, state->data_stack_base, size)); \
441439
if (size > state->data_stack_size - state->data_stack_base) { \
442440
int j = data_stack_grow(state, size); \
@@ -453,8 +451,7 @@ do { \
453451
safely casted to `void*`, see bpo-39943 for details. */
454452
#define DATA_STACK_POP(state, data, size, discard) \
455453
do { \
456-
TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
457-
"(%" PY_FORMAT_SIZE_T "d)\n", \
454+
TRACE(("copy data to %p from %zd (%zd)\n", \
458455
data, state->data_stack_base-size, size)); \
459456
memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
460457
if (discard) \
@@ -463,8 +460,7 @@ do { \
463460

464461
#define DATA_STACK_POP_DISCARD(state, size) \
465462
do { \
466-
TRACE(("discard data from %" PY_FORMAT_SIZE_T "d " \
467-
"(%" PY_FORMAT_SIZE_T "d)\n", \
463+
TRACE(("discard data from %zd (%zd)\n", \
468464
state->data_stack_base-size, size)); \
469465
state->data_stack_base -= size; \
470466
} while(0)
@@ -577,8 +573,7 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
577573
/* optimization info block */
578574
/* <INFO> <1=skip> <2=flags> <3=min> ... */
579575
if (ctx->pattern[3] && (uintptr_t)(end - ctx->ptr) < ctx->pattern[3]) {
580-
TRACE(("reject (got %" PY_FORMAT_SIZE_T "d chars, "
581-
"need %" PY_FORMAT_SIZE_T "d)\n",
576+
TRACE(("reject (got %zd chars, need %zd)\n",
582577
end - ctx->ptr, (Py_ssize_t) ctx->pattern[3]));
583578
RETURN_FAILURE;
584579
}
@@ -1028,7 +1023,7 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
10281023

10291024
ctx->count = ctx->u.rep->count+1;
10301025

1031-
TRACE(("|%p|%p|MAX_UNTIL %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
1026+
TRACE(("|%p|%p|MAX_UNTIL %zd\n", ctx->pattern,
10321027
ctx->ptr, ctx->count));
10331028

10341029
if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
@@ -1091,7 +1086,7 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
10911086

10921087
ctx->count = ctx->u.rep->count+1;
10931088

1094-
TRACE(("|%p|%p|MIN_UNTIL %" PY_FORMAT_SIZE_T "d %p\n", ctx->pattern,
1089+
TRACE(("|%p|%p|MIN_UNTIL %zd %p\n", ctx->pattern,
10951090
ctx->ptr, ctx->count, ctx->u.rep->pattern));
10961091

10971092
if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
@@ -1358,7 +1353,7 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
13581353
TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", ctx->pattern, ctx->ptr));
13591354
goto jump_assert_not;
13601355
case JUMP_NONE:
1361-
TRACE(("|%p|%p|RETURN %" PY_FORMAT_SIZE_T "d\n", ctx->pattern,
1356+
TRACE(("|%p|%p|RETURN %zd\n", ctx->pattern,
13621357
ctx->ptr, ret));
13631358
break;
13641359
}
@@ -1420,7 +1415,7 @@ SRE(search)(SRE_STATE* state, SRE_CODE* pattern)
14201415
pattern += 1 + pattern[1];
14211416
}
14221417

1423-
TRACE(("prefix = %p %" PY_FORMAT_SIZE_T "d %" PY_FORMAT_SIZE_T "d\n",
1418+
TRACE(("prefix = %p %zd %zd\n",
14241419
prefix, prefix_len, prefix_skip));
14251420
TRACE(("charset = %p\n", charset));
14261421

Objects/bytesobject.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -256,27 +256,29 @@ PyBytes_FromFormatV(const char *format, va_list vargs)
256256
}
257257

258258
case 'd':
259-
if (longflag)
259+
if (longflag) {
260260
sprintf(buffer, "%ld", va_arg(vargs, long));
261-
else if (size_tflag)
262-
sprintf(buffer, "%" PY_FORMAT_SIZE_T "d",
263-
va_arg(vargs, Py_ssize_t));
264-
else
261+
}
262+
else if (size_tflag) {
263+
sprintf(buffer, "%zd", va_arg(vargs, Py_ssize_t));
264+
}
265+
else {
265266
sprintf(buffer, "%d", va_arg(vargs, int));
267+
}
266268
assert(strlen(buffer) < sizeof(buffer));
267269
WRITE_BYTES(buffer);
268270
break;
269271

270272
case 'u':
271-
if (longflag)
272-
sprintf(buffer, "%lu",
273-
va_arg(vargs, unsigned long));
274-
else if (size_tflag)
275-
sprintf(buffer, "%" PY_FORMAT_SIZE_T "u",
276-
va_arg(vargs, size_t));
277-
else
278-
sprintf(buffer, "%u",
279-
va_arg(vargs, unsigned int));
273+
if (longflag) {
274+
sprintf(buffer, "%lu", va_arg(vargs, unsigned long));
275+
}
276+
else if (size_tflag) {
277+
sprintf(buffer, "%zu", va_arg(vargs, size_t));
278+
}
279+
else {
280+
sprintf(buffer, "%u", va_arg(vargs, unsigned int));
281+
}
280282
assert(strlen(buffer) < sizeof(buffer));
281283
WRITE_BYTES(buffer);
282284
break;

Objects/object.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ _Py_GetRefTotal(void)
6666
void
6767
_PyDebug_PrintTotalRefs(void) {
6868
fprintf(stderr,
69-
"[%" PY_FORMAT_SIZE_T "d refs, "
70-
"%" PY_FORMAT_SIZE_T "d blocks]\n",
69+
"[%zd refs, %zd blocks]\n",
7170
_Py_GetRefTotal(), _Py_GetAllocatedBlocks());
7271
}
7372
#endif /* Py_REF_DEBUG */
@@ -1876,9 +1875,10 @@ _Py_PrintReferences(FILE *fp)
18761875
PyObject *op;
18771876
fprintf(fp, "Remaining objects:\n");
18781877
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
1879-
fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, Py_REFCNT(op));
1880-
if (PyObject_Print(op, fp, 0) != 0)
1878+
fprintf(fp, "%p [%zd] ", (void *)op, Py_REFCNT(op));
1879+
if (PyObject_Print(op, fp, 0) != 0) {
18811880
PyErr_Clear();
1881+
}
18821882
putc('\n', fp);
18831883
}
18841884
}
@@ -1892,7 +1892,7 @@ _Py_PrintReferenceAddresses(FILE *fp)
18921892
PyObject *op;
18931893
fprintf(fp, "Remaining object addresses:\n");
18941894
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
1895-
fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,
1895+
fprintf(fp, "%p [%zd] %s\n", (void *)op,
18961896
Py_REFCNT(op), Py_TYPE(op)->tp_name);
18971897
}
18981898

Objects/obmalloc.c

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2420,8 +2420,7 @@ _PyObject_DebugDumpAddress(const void *p)
24202420
fprintf(stderr, " API '%c'\n", id);
24212421

24222422
nbytes = read_size_t(q - 2*SST);
2423-
fprintf(stderr, " %" PY_FORMAT_SIZE_T "u bytes originally "
2424-
"requested\n", nbytes);
2423+
fprintf(stderr, " %zu bytes originally requested\n", nbytes);
24252424

24262425
/* In case this is nuts, check the leading pad bytes first. */
24272426
fprintf(stderr, " The %d pad bytes at p-%d are ", SST-1, SST-1);
@@ -2477,8 +2476,9 @@ _PyObject_DebugDumpAddress(const void *p)
24772476

24782477
#ifdef PYMEM_DEBUG_SERIALNO
24792478
size_t serial = read_size_t(tail + SST);
2480-
fprintf(stderr, " The block was made by call #%" PY_FORMAT_SIZE_T
2481-
"u to debug malloc/realloc.\n", serial);
2479+
fprintf(stderr,
2480+
" The block was made by call #%zu to debug malloc/realloc.\n",
2481+
serial);
24822482
#endif
24832483

24842484
if (nbytes > 0) {
@@ -2553,7 +2553,7 @@ _PyDebugAllocatorStats(FILE *out,
25532553
char buf1[128];
25542554
char buf2[128];
25552555
PyOS_snprintf(buf1, sizeof(buf1),
2556-
"%d %ss * %" PY_FORMAT_SIZE_T "d bytes each",
2556+
"%d %ss * %zd bytes each",
25572557
num_blocks, block_name, sizeof_block);
25582558
PyOS_snprintf(buf2, sizeof(buf2),
25592559
"%48s ", buf1);
@@ -2694,10 +2694,7 @@ _PyObject_DebugMallocStats(FILE *out)
26942694
assert(b == 0 && f == 0);
26952695
continue;
26962696
}
2697-
fprintf(out, "%5u %6u "
2698-
"%11" PY_FORMAT_SIZE_T "u "
2699-
"%15" PY_FORMAT_SIZE_T "u "
2700-
"%13" PY_FORMAT_SIZE_T "u\n",
2697+
fprintf(out, "%5u %6u %11zu %15zu %13zu\n",
27012698
i, size, p, b, f);
27022699
allocated_bytes += b * size;
27032700
available_bytes += f * size;
@@ -2716,8 +2713,8 @@ _PyObject_DebugMallocStats(FILE *out)
27162713
(void)printone(out, "# arenas allocated current", narenas);
27172714

27182715
PyOS_snprintf(buf, sizeof(buf),
2719-
"%" PY_FORMAT_SIZE_T "u arenas * %d bytes/arena",
2720-
narenas, ARENA_SIZE);
2716+
"%zu arenas * %d bytes/arena",
2717+
narenas, ARENA_SIZE);
27212718
(void)printone(out, buf, narenas * ARENA_SIZE);
27222719

27232720
fputc('\n', out);

0 commit comments

Comments
 (0)
0