--- Modules/posixmodule.c +++ Modules/posixmodule.c @@ -13998,6 +13998,9 @@ }; static int +#if defined __clang__ +__attribute__((no_sanitize("shift-base"))) // MFD_HUGE_16GB in /usr/include/linux/memfd.h +#endif all_ins(PyObject *m) { #ifdef F_OK --- Objects/dictobject.c +++ Objects/dictobject.c @@ -2105,7 +2105,7 @@ if (unicode) { // combined unicode -> combined unicode PyDictUnicodeEntry *newentries = DK_UNICODE_ENTRIES(newkeys); if (oldkeys->dk_nentries == numentries && mp->ma_keys->dk_kind == DICT_KEYS_UNICODE) { - memcpy(newentries, oldentries, numentries * sizeof(PyDictUnicodeEntry)); + memcpy(newentries, (void *) oldentries, numentries * sizeof(PyDictUnicodeEntry)); } else { PyDictUnicodeEntry *ep = oldentries; --- Objects/listobject.c +++ Objects/listobject.c @@ -539,7 +539,7 @@ dest[i] = Py_NewRef(v); } src = b->ob_item; - dest = np->ob_item + Py_SIZE(a); + dest = Py_SIZE(a) == 0 ? np->ob_item : np->ob_item + Py_SIZE(a); for (i = 0; i < Py_SIZE(b); i++) { PyObject *v = src[i]; dest[i] = Py_NewRef(v); @@ -1325,7 +1325,7 @@ Py_ssize_t setpos = 0; Py_hash_t hash; PyObject *key; - PyObject **dest = self->ob_item + m; + PyObject **dest = m == 0 ? self->ob_item : self->ob_item + m; while (_PySet_NextEntryRef((PyObject *)other, &setpos, &key, &hash)) { FT_ATOMIC_STORE_PTR_RELEASE(*dest, key); dest++; @@ -1344,7 +1344,7 @@ return -1; } - PyObject **dest = self->ob_item + m; + PyObject **dest = m == 0 ? self->ob_item : self->ob_item + m; Py_ssize_t pos = 0; PyObject *keyvalue[2]; while (_PyDict_Next((PyObject *)dict, &pos, &keyvalue[0], &keyvalue[1], NULL)) { @@ -1367,7 +1367,7 @@ return -1; } - PyObject **dest = self->ob_item + m; + PyObject **dest = m == 0 ? self->ob_item : self->ob_item + m; Py_ssize_t pos = 0; Py_ssize_t i = 0; PyObject *key, *value; --- Parser/lexer/buffer.c +++ Parser/lexer/buffer.c @@ -29,8 +29,8 @@ for (index = tok->tok_mode_stack_index; index >= 0; --index) { mode = &(tok->tok_mode_stack[index]); - mode->f_string_start = mode->f_string_start_offset < 0 ? NULL : tok->buf + mode->f_string_start_offset; - mode->f_string_multi_line_start = mode->f_string_multi_line_start_offset < 0 ? NULL : tok->buf + mode->f_string_multi_line_start_offset; + mode->f_string_start = mode->f_string_start_offset < 0 ? NULL : (char *) (((intptr_t) tok->buf) + mode->f_string_start_offset); + mode->f_string_multi_line_start = mode->f_string_multi_line_start_offset < 0 ? NULL : (char *) (((intptr_t) tok->buf) + mode->f_string_multi_line_start_offset); mode->last_expr_start = mode->last_expr_start_offset < 0 ? NULL : tok->buf + mode->last_expr_start_offset; }