Skip to content

Commit 1e5aacc

Browse files
authored
Merge branch 'main' into pythongh-116380
2 parents 1d32d14 + 0634201 commit 1e5aacc

File tree

475 files changed

+12225
-6143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

475 files changed

+12225
-6143
lines changed

.devcontainer/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ FROM docker.io/library/fedora:37
22

33
ENV CC=clang
44

5-
ENV WASI_SDK_VERSION=20
5+
ENV WASI_SDK_VERSION=21
66
ENV WASI_SDK_PATH=/opt/wasi-sdk
77

88
ENV WASMTIME_HOME=/opt/wasmtime
9-
ENV WASMTIME_VERSION=18.0.2
9+
ENV WASMTIME_VERSION=18.0.3
1010
ENV WASMTIME_CPU_ARCH=x86_64
1111

1212
RUN dnf -y --nodocs --setopt=install_weak_deps=False install /usr/bin/{blurb,clang,curl,git,ln,tar,xz} 'dnf-command(builddep)' && \

.github/workflows/build.yml

+36
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ jobs:
206206
uses: ./.github/workflows/reusable-macos.yml
207207
with:
208208
config_hash: ${{ needs.check_source.outputs.config_hash }}
209+
# macos-14 is M1, macos-13 is Intel
210+
os-matrix: '["macos-14", "macos-13"]'
209211

210212
build_macos_free_threading:
211213
name: 'macOS (free-threading)'
@@ -215,6 +217,8 @@ jobs:
215217
with:
216218
config_hash: ${{ needs.check_source.outputs.config_hash }}
217219
free-threading: true
220+
# macos-14 is M1
221+
os-matrix: '["macos-14"]'
218222

219223
build_ubuntu:
220224
name: 'Ubuntu'
@@ -301,6 +305,14 @@ jobs:
301305
- name: SSL tests
302306
run: ./python Lib/test/ssltests.py
303307

308+
build_wasi:
309+
name: 'WASI'
310+
needs: check_source
311+
if: needs.check_source.outputs.run_tests == 'true'
312+
uses: ./.github/workflows/reusable-wasi.yml
313+
with:
314+
config_hash: ${{ needs.check_source.outputs.config_hash }}
315+
304316
test_hypothesis:
305317
name: "Hypothesis tests on Ubuntu"
306318
runs-on: ubuntu-20.04
@@ -472,6 +484,24 @@ jobs:
472484
- name: Tests
473485
run: xvfb-run make test
474486

487+
build_tsan:
488+
name: 'Thread sanitizer'
489+
needs: check_source
490+
if: needs.check_source.outputs.run_tests == 'true'
491+
uses: ./.github/workflows/reusable-tsan.yml
492+
with:
493+
config_hash: ${{ needs.check_source.outputs.config_hash }}
494+
options: ./configure --config-cache --with-thread-sanitizer --with-pydebug
495+
496+
build_tsan_free_threading:
497+
name: 'Thread sanitizer (free-threading)'
498+
needs: check_source
499+
if: needs.check_source.outputs.run_tests == 'true'
500+
uses: ./.github/workflows/reusable-tsan.yml
501+
with:
502+
config_hash: ${{ needs.check_source.outputs.config_hash }}
503+
options: ./configure --config-cache --disable-gil --with-thread-sanitizer --with-pydebug
504+
475505
# CIFuzz job based on https://google.github.io/oss-fuzz/getting-started/continuous-integration/
476506
cifuzz:
477507
name: CIFuzz
@@ -525,10 +555,13 @@ jobs:
525555
- build_ubuntu
526556
- build_ubuntu_free_threading
527557
- build_ubuntu_ssltests
558+
- build_wasi
528559
- build_windows
529560
- build_windows_free_threading
530561
- test_hypothesis
531562
- build_asan
563+
- build_tsan
564+
- build_tsan_free_threading
532565
- cifuzz
533566

534567
runs-on: ubuntu-latest
@@ -558,9 +591,12 @@ jobs:
558591
build_ubuntu,
559592
build_ubuntu_free_threading,
560593
build_ubuntu_ssltests,
594+
build_wasi,
561595
build_windows,
562596
build_windows_free_threading,
563597
build_asan,
598+
build_tsan,
599+
build_tsan_free_threading,
564600
'
565601
|| ''
566602
}}

.github/workflows/reusable-macos.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ on:
88
required: false
99
type: boolean
1010
default: false
11+
os-matrix:
12+
required: false
13+
type: string
1114

1215
jobs:
1316
build_macos:
@@ -22,10 +25,7 @@ jobs:
2225
strategy:
2326
fail-fast: false
2427
matrix:
25-
os: [
26-
"macos-14", # M1
27-
"macos-13", # Intel
28-
]
28+
os: ${{fromJson(inputs.os-matrix)}}
2929
runs-on: ${{ matrix.os }}
3030
steps:
3131
- uses: actions/checkout@v4

.github/workflows/reusable-tsan.yml

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
on:
2+
workflow_call:
3+
inputs:
4+
config_hash:
5+
required: true
6+
type: string
7+
options:
8+
required: true
9+
type: string
10+
11+
jobs:
12+
build_tsan_reusable:
13+
name: 'Thread sanitizer'
14+
runs-on: ubuntu-22.04
15+
timeout-minutes: 60
16+
steps:
17+
- uses: actions/checkout@v4
18+
- name: Runner image version
19+
run: echo "IMAGE_VERSION=${ImageVersion}" >> $GITHUB_ENV
20+
- name: Restore config.cache
21+
uses: actions/cache@v4
22+
with:
23+
path: config.cache
24+
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ inputs.config_hash }}
25+
- name: Install Dependencies
26+
run: |
27+
sudo ./.github/workflows/posix-deps-apt.sh
28+
sudo apt install -y clang
29+
# Reduce ASLR to avoid TSAN crashing
30+
sudo sysctl -w vm.mmap_rnd_bits=28
31+
- name: TSAN Option Setup
32+
run: |
33+
echo "TSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/Tools/tsan/supressions.txt" >> $GITHUB_ENV
34+
echo "CC=clang" >> $GITHUB_ENV
35+
echo "CXX=clang++" >> $GITHUB_ENV
36+
- name: Add ccache to PATH
37+
run: |
38+
echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
39+
- name: Configure ccache action
40+
uses: hendrikmuhs/ccache-action@v1.2
41+
with:
42+
save: ${{ github.event_name == 'push' }}
43+
max-size: "200M"
44+
- name: Configure CPython
45+
run: ${{ inputs.options }}
46+
- name: Build CPython
47+
run: make -j4
48+
- name: Display build info
49+
run: make pythoninfo
50+
- name: Tests
51+
run: ./python -m test --tsan -j4

.github/workflows/reusable-wasi.yml

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
on:
2+
workflow_call:
3+
inputs:
4+
config_hash:
5+
required: true
6+
type: string
7+
8+
jobs:
9+
build_wasi_reusable:
10+
name: 'build and test'
11+
timeout-minutes: 60
12+
runs-on: ubuntu-20.04
13+
env:
14+
WASMTIME_VERSION: 18.0.3
15+
WASI_SDK_VERSION: 21
16+
WASI_SDK_PATH: /opt/wasi-sdk
17+
CROSS_BUILD_PYTHON: cross-build/build
18+
CROSS_BUILD_WASI: cross-build/wasm32-wasi
19+
steps:
20+
- uses: actions/checkout@v4
21+
# No problem resolver registered as one doesn't currently exist for Clang.
22+
- name: "Install wasmtime"
23+
uses: jcbhmr/setup-wasmtime@v2
24+
with:
25+
wasmtime-version: ${{ env.WASMTIME_VERSION }}
26+
- name: "Restore WASI SDK"
27+
id: cache-wasi-sdk
28+
uses: actions/cache@v4
29+
with:
30+
path: ${{ env.WASI_SDK_PATH }}
31+
key: ${{ runner.os }}-wasi-sdk-${{ env.WASI_SDK_VERSION }}
32+
- name: "Install WASI SDK"
33+
if: steps.cache-wasi-sdk.outputs.cache-hit != 'true'
34+
run: |
35+
mkdir ${{ env.WASI_SDK_PATH }} && \
36+
curl -s -S --location https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ env.WASI_SDK_VERSION }}/wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-linux.tar.gz | \
37+
tar --strip-components 1 --directory ${{ env.WASI_SDK_PATH }} --extract --gunzip
38+
- name: "Configure ccache action"
39+
uses: hendrikmuhs/ccache-action@v1.2
40+
with:
41+
save: ${{ github.event_name == 'push' }}
42+
max-size: "200M"
43+
- name: "Add ccache to PATH"
44+
run: echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
45+
- name: "Install Python"
46+
uses: actions/setup-python@v5
47+
with:
48+
python-version: '3.x'
49+
- name: "Restore Python build config.cache"
50+
uses: actions/cache@v4
51+
with:
52+
path: ${{ env.CROSS_BUILD_PYTHON }}/config.cache
53+
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ inputs.config_hash }}
54+
- name: "Configure build Python"
55+
run: python3 Tools/wasm/wasi.py configure-build-python -- --config-cache --with-pydebug
56+
- name: "Make build Python"
57+
run: python3 Tools/wasm/wasi.py make-build-python
58+
- name: "Restore host config.cache"
59+
uses: actions/cache@v4
60+
with:
61+
path: ${{ env.CROSS_BUILD_WASI }}/config.cache
62+
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-wasi-sdk-${{ env.WASI_SDK_VERSION }}-${{ inputs.config_hash }}
63+
- name: "Configure host"
64+
# `--with-pydebug` inferred from configure-build-python
65+
run: python3 Tools/wasm/wasi.py configure-host -- --config-cache
66+
- name: "Make host"
67+
run: python3 Tools/wasm/wasi.py make-host
68+
- name: "Display build info"
69+
run: make --directory ${{ env.CROSS_BUILD_WASI }} pythoninfo
70+
- name: "Test"
71+
run: make --directory ${{ env.CROSS_BUILD_WASI }} test

.github/workflows/stale.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Mark stale pull requests
22

33
on:
44
schedule:
5-
- cron: "0 0 * * *"
5+
- cron: "0 */6 * * *"
66

77
permissions:
88
pull-requests: write

.gitignore

+10
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,17 @@ Lib/test/data/*
6969
/_bootstrap_python
7070
/Makefile
7171
/Makefile.pre
72+
iOSTestbed.*
73+
iOS/Frameworks/
7274
iOS/Resources/Info.plist
75+
iOS/testbed/build
76+
iOS/testbed/Python.xcframework/ios-*/bin
77+
iOS/testbed/Python.xcframework/ios-*/include
78+
iOS/testbed/Python.xcframework/ios-*/lib
79+
iOS/testbed/Python.xcframework/ios-*/Python.framework
80+
iOS/testbed/iOSTestbed.xcodeproj/project.xcworkspace
81+
iOS/testbed/iOSTestbed.xcodeproj/xcuserdata
82+
iOS/testbed/iOSTestbed.xcodeproj/xcshareddata
7383
Mac/Makefile
7484
Mac/PythonLauncher/Info.plist
7585
Mac/PythonLauncher/Makefile

Doc/c-api/contextvars.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Context Variables Objects
66
-------------------------
77

88
.. _contextvarsobjects_pointertype_change:
9+
.. versionadded:: 3.7
10+
911
.. versionchanged:: 3.7.1
1012

1113
.. note::
@@ -24,8 +26,6 @@ Context Variables Objects
2426
See :issue:`34762` for more details.
2527

2628

27-
.. versionadded:: 3.7
28-
2929
This section details the public C API for the :mod:`contextvars` module.
3030

3131
.. c:type:: PyContext

Doc/c-api/hash.rst

+24-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
PyHash API
44
----------
55

6-
See also the :c:member:`PyTypeObject.tp_hash` member.
6+
See also the :c:member:`PyTypeObject.tp_hash` member and :ref:`numeric-hash`.
77

88
.. c:type:: Py_hash_t
99
@@ -17,6 +17,29 @@ See also the :c:member:`PyTypeObject.tp_hash` member.
1717

1818
.. versionadded:: 3.2
1919

20+
.. c:macro:: PyHASH_MODULUS
21+
22+
The `Mersenne prime <https://en.wikipedia.org/wiki/Mersenne_prime>`_ ``P = 2**n -1``, used for numeric hash scheme.
23+
24+
.. versionadded:: 3.13
25+
26+
.. c:macro:: PyHASH_BITS
27+
28+
The exponent ``n`` of ``P`` in :c:macro:`PyHASH_MODULUS`.
29+
30+
.. versionadded:: 3.13
31+
32+
.. c:macro:: PyHASH_INF
33+
34+
The hash value returned for a positive infinity.
35+
36+
.. versionadded:: 3.13
37+
38+
.. c:macro:: PyHASH_IMAG
39+
40+
The multiplier used for the imaginary part of a complex number.
41+
42+
.. versionadded:: 3.13
2043

2144
.. c:type:: PyHash_FuncDef
2245

Doc/c-api/import.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ Importing Modules
308308
309309
The module name, as an ASCII encoded string.
310310
311-
.. c: member:: PyObject* (*initfunc)(void)
311+
.. c:member:: PyObject* (*initfunc)(void)
312312
313313
Initialization function for a module built into the interpreter.
314314

Doc/c-api/init.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -1575,14 +1575,14 @@ pointer and a void pointer argument.
15751575
function is generally **not** suitable for calling Python code from
15761576
arbitrary C threads. Instead, use the :ref:`PyGILState API<gilstate>`.
15771577
1578+
.. versionadded:: 3.1
1579+
15781580
.. versionchanged:: 3.9
15791581
If this function is called in a subinterpreter, the function *func* is
15801582
now scheduled to be called from the subinterpreter, rather than being
15811583
called from the main interpreter. Each subinterpreter now has its own
15821584
list of scheduled calls.
15831585
1584-
.. versionadded:: 3.1
1585-
15861586
.. _profiling:
15871587
15881588
Profiling and Tracing

Doc/c-api/long.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
450450
a “fast path” for small integers. For compact values use
451451
:c:func:`PyUnstable_Long_CompactValue`; for others fall back to a
452452
:c:func:`PyLong_As* <PyLong_AsSize_t>` function or
453-
:c:func:`calling <PyObject_CallMethod>` :meth:`int.to_bytes`.
453+
:c:func:`PyLong_AsNativeBytes`.
454454
455455
The speedup is expected to be negligible for most users.
456456

Doc/c-api/refcounting.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ of Python objects.
2323
2424
Use the :c:func:`Py_SET_REFCNT()` function to set an object reference count.
2525
26-
.. versionchanged:: 3.11
27-
The parameter type is no longer :c:expr:`const PyObject*`.
28-
2926
.. versionchanged:: 3.10
3027
:c:func:`Py_REFCNT()` is changed to the inline static function.
3128
29+
.. versionchanged:: 3.11
30+
The parameter type is no longer :c:expr:`const PyObject*`.
31+
3232
3333
.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
3434

0 commit comments

Comments
 (0)