summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorAmmar Askar <ammar@ammaraskar.com>2020-06-01 17:21:43 (GMT)
committerGitHub <noreply@github.com>2020-06-01 17:21:43 (GMT)
commit06e3a27a3c863495390a07c695171a8e62a6e0d2 (patch)
tree9d2d738971d6a057717c5f233d40a53a94121064 /Modules
parenta97011b9b8c8111f42e1e7594081956136d848da (diff)
downloadcpython-06e3a27a3c863495390a07c695171a8e62a6e0d2.zip
cpython-06e3a27a3c863495390a07c695171a8e62a6e0d2.tar.gz
cpython-06e3a27a3c863495390a07c695171a8e62a6e0d2.tar.bz2
bpo-39943: Fix MSVC warnings in sre extension (GH-20508)
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_sre.c8
-rw-r--r--Modules/sre_lib.h5
2 files changed, 10 insertions, 3 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 244e4f1..bdc4278 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -454,7 +454,10 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
return string;
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;
if (state->buffer.buf)
PyBuffer_Release(&state->buffer);
@@ -468,7 +471,8 @@ state_fini(SRE_STATE* state)
PyBuffer_Release(&state->buffer);
Py_XDECREF(state->string);
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;
}
diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h
index 9cc7863..2657d8d 100644
--- a/Modules/sre_lib.h
+++ b/Modules/sre_lib.h
@@ -448,12 +448,15 @@ do { \
state->data_stack_base += size; \
} 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) \
do { \
TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \
"(%" PY_FORMAT_SIZE_T "d)\n", \
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) \
state->data_stack_base -= size; \
} while (0)