bpo-39943: Fix MSVC warnings in sre extension (GH-20508)

This commit is contained in:
Ammar Askar 2020-06-01 17:21:43 +00:00 committed by GitHub
parent a97011b9b8
commit 06e3a27a3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 3 deletions

View File

@ -454,7 +454,10 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
return string; return string;
err: err:
PyMem_Del(state->mark); /* We add an explicit cast here because MSVC has a bug when
compiling C code where it believes that `const void**` cannot be
safely casted to `void*`, see bpo-39943 for details. */
PyMem_Del((void*) state->mark);
state->mark = NULL; state->mark = NULL;
if (state->buffer.buf) if (state->buffer.buf)
PyBuffer_Release(&state->buffer); PyBuffer_Release(&state->buffer);
@ -468,7 +471,8 @@ state_fini(SRE_STATE* state)
PyBuffer_Release(&state->buffer); PyBuffer_Release(&state->buffer);
Py_XDECREF(state->string); Py_XDECREF(state->string);
data_stack_dealloc(state); data_stack_dealloc(state);
PyMem_Del(state->mark); /* See above PyMem_Del for why we explicitly cast here. */
PyMem_Del((void*) state->mark);
state->mark = NULL; state->mark = NULL;
} }

View File

@ -448,12 +448,15 @@ do { \
state->data_stack_base += size; \ state->data_stack_base += size; \
} while (0) } while (0)
/* We add an explicit cast to memcpy here because MSVC has a bug when
compiling C code where it believes that `const void**` cannot be
safely casted to `void*`, see bpo-39943 for details. */
#define DATA_STACK_POP(state, data, size, discard) \ #define DATA_STACK_POP(state, data, size, discard) \
do { \ do { \
TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \ TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
"(%" PY_FORMAT_SIZE_T "d)\n", \ "(%" PY_FORMAT_SIZE_T "d)\n", \
data, state->data_stack_base-size, size)); \ data, state->data_stack_base-size, size)); \
memcpy(data, state->data_stack+state->data_stack_base-size, size); \ memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
if (discard) \ if (discard) \
state->data_stack_base -= size; \ state->data_stack_base -= size; \
} while (0) } while (0)