4343 # please update the versions in `Tools/pixi-packages/variants.yaml` too.
4444 echo "CC=clang" >> "$GITHUB_ENV"
4545 echo "CXX=clang++" >> "$GITHUB_ENV"
46+ - name : ASan option setup
47+ if : inputs.sanitizer == 'ASan'
48+ run : |
49+ echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
50+ echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> "$GITHUB_ENV"
51+ echo "ASAN_OPTIONS=${SAN_LOG_OPTION} detect_leaks=0 allocator_may_return_null=1 handle_segv=0" >> "$GITHUB_ENV"
52+ echo "PYTHONSTRICTEXTENSIONBUILD=1" >> "$GITHUB_ENV"
53+ env :
54+ SAN_LOG_OPTION : log_path=${{ github.workspace }}/san_log
4655 - name : TSan option setup
4756 if : inputs.sanitizer == 'TSan'
4857 run : |
@@ -88,24 +97,27 @@ jobs:
8897 - name : Add ccache to PATH
8998 run : |
9099 echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
91- - name : ' Restore OpenSSL build (TSan) '
100+ - name : ' Restore OpenSSL build'
92101 id : cache-openssl
93- if : inputs.sanitizer == 'TSan'
102+ if : inputs.sanitizer == 'TSan' || inputs.sanitizer == 'ASan'
94103 uses : actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
95104 with :
96105 path : ./multissl/openssl/${{ env.OPENSSL_VER }}
97- key : ${{ env.IMAGE_OS_VERSION }}-multissl-openssl-tsan-${{ env.OPENSSL_VER }}
98- - name : Install OpenSSL (TSan)
106+ key : >-
107+ ${{ env.IMAGE_OS_VERSION }}-multissl-openssl-${{
108+ inputs.sanitizer == 'TSan' && 'tsan-' || ''
109+ }}${{ env.OPENSSL_VER }}
110+ - name : Install OpenSSL
99111 if : >-
100- inputs.sanitizer == 'TSan'
112+ ( inputs.sanitizer == 'TSan' || inputs.sanitizer == 'ASan')
101113 && steps.cache-openssl.outputs.cache-hit != 'true'
102114 run : >-
103115 python3 Tools/ssl/multissltests.py
104116 --steps=library
105117 --base-directory="${MULTISSL_DIR}"
106118 --openssl="${OPENSSL_VER}"
107119 --system=Linux
108- --tsan
120+ ${{ inputs.sanitizer == 'TSan' && ' --tsan' || '' }}
109121 # gh-157958: -O2 instead of the pydebug default -Og to avoid a clang 21
110122 # compile-time blowup on some interpreter files.
111123 # (https://github.com/llvm/llvm-project/issues/179695)
@@ -117,14 +129,20 @@ jobs:
117129 --config-cache
118130 OPT="-O2 -g"
119131 ${{
120- inputs.sanitizer == 'TSan'
132+ inputs.sanitizer == 'ASan'
133+ && '--with-address-sanitizer --without-pymalloc'
134+ || inputs.sanitizer == 'TSan'
121135 && '--with-thread-sanitizer'
122136 || inputs.sanitizer == 'MSan'
123137 && '--with-memory-sanitizer'
124138 || '--with-undefined-behavior-sanitizer --with-strict-overflow'
125139 }}
126140 ${{ inputs.sanitizer == 'MSan' && '--with-assertions' || '--with-pydebug' }}
127- ${{ inputs.sanitizer == 'TSan' && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto' || '' }}
141+ ${{
142+ (inputs.sanitizer == 'TSan' || inputs.sanitizer == 'ASan')
143+ && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto'
144+ || ''
145+ }}
128146 ${{ inputs.free-threading && '--disable-gil' || '' }}
129147 - name : Build CPython
130148 run : make -j4
0 commit comments