This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: PySlice_GetIndicesEx change broke ABI in 3.5 and 3.6 branches
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.6, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: serhiy.storchaka Nosy List: arigo, benjamin.peterson, cgohlke, cstratak, hroncok, jhelmus, josh.r, larry, mark.dickinson, ned.deily, njs, serhiy.storchaka, skrah, steve.dower
Priority: release blocker Keywords:

Created on 2017-03-29 23:36 by njs, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 1049 merged serhiy.storchaka, 2017-04-08 09:26
PR 1050 merged serhiy.storchaka, 2017-04-08 09:27
PR 1813 merged serhiy.storchaka, 2017-05-25 11:27
PR 2015 dino.viehland, 2017-06-09 01:22
Messages (27)
msg290796 - (view) Author: Nathaniel Smith (njs) * (Python committer) Date: 2017-03-29 23:36
In the process of fixing issue 27867, a new function PySlice_AdjustIndices was added, and PySlice_GetIndicesEx was converted into a macro that calls this new function. The patch was backported to both the 3.5 and 3.6 branches, was released in 3.6.1, and is currently slated to be released as part of 3.5.4.

Unfortunately, this breaks our normal ABI stability guarantees for micro releases: it means that if a C module that uses PySlice_GetIndicesEx is compiled against e.g. 3.6.1, then it cannot be imported on 3.6.0. This affects a number of high-profile packages (cffi, pandas, mpi4py, dnf, ...). The only workaround is that if you are distributing binary extension modules (e.g. wheels), then you need to be careful not to upgrade to 3.6.1. It's not possible for a wheel to declare that it requires 3.6.1-or-better, because CPython normally follows the rule that we don't make these kinds of changes. Oops.

CC'ing Ned and Larry, because it's possible this should trigger a 3.6.2, and I think it's a blocker for 3.5.4. CC'ing Serhiy as the author of the original patch, since you probably have the best idea how this could be unwound with minimal breakage :-).

python-dev discussion: