ENH: Detect Fortran vs C order in array_assign_boolean_subscript (#30… #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test with compiler sanitizers | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| - maintenance/** | |
| paths-ignore: | |
| - '**.pyi' | |
| - '**.md' | |
| - '**.rst' | |
| defaults: | |
| run: | |
| shell: bash | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| jobs: | |
| clang_ASAN_UBSAN: | |
| # To enable this workflow on a fork, comment out: | |
| if: github.repository == 'numpy/numpy' | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| submodules: recursive | |
| fetch-tags: true | |
| persist-credentials: false | |
| - name: Set up pyenv | |
| run: | | |
| git clone https://github.com/pyenv/pyenv.git "$HOME/.pyenv" | |
| PYENV_ROOT="$HOME/.pyenv" | |
| PYENV_BIN="$PYENV_ROOT/bin" | |
| PYENV_SHIMS="$PYENV_ROOT/shims" | |
| echo "$PYENV_BIN" >> $GITHUB_PATH | |
| echo "$PYENV_SHIMS" >> $GITHUB_PATH | |
| echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV | |
| - name: Check pyenv is working | |
| run: | |
| pyenv --version | |
| - name: Set up LLVM | |
| run: | | |
| brew install llvm@20 | |
| LLVM_PREFIX=$(brew --prefix llvm@20) | |
| echo CC="$LLVM_PREFIX/bin/clang" >> $GITHUB_ENV | |
| echo CXX="$LLVM_PREFIX/bin/clang++" >> $GITHUB_ENV | |
| echo LDFLAGS="-L$LLVM_PREFIX/lib" >> $GITHUB_ENV | |
| echo CPPFLAGS="-I$LLVM_PREFIX/include" >> $GITHUB_ENV | |
| - name: Build Python with address sanitizer | |
| run: | | |
| CONFIGURE_OPTS="--with-address-sanitizer" pyenv install 3.14 | |
| pyenv global 3.14 | |
| - name: Install dependencies | |
| run: | | |
| pip install -r requirements/build_requirements.txt | |
| pip install -r requirements/ci_requirements.txt | |
| pip install -r requirements/test_requirements.txt | |
| # xdist captures stdout/stderr, but we want the ASAN output | |
| pip uninstall -y pytest-xdist | |
| - name: Build | |
| run: | |
| python -m spin build -- -Db_sanitize=address,undefined -Db_lundef=false | |
| - name: Test | |
| run: | | |
| # pass -s to pytest to see ASAN errors and warnings, otherwise pytest captures them | |
| # Ignore test_casting_floatingpoint_errors on macOS for now - causes crash inside UBSAN | |
| ASAN_OPTIONS=detect_leaks=0:symbolize=1:strict_init_order=true:allocator_may_return_null=1 \ | |
| UBSAN_OPTIONS=halt_on_error=1:suppressions=${GITHUB_WORKSPACE}/tools/ci/ubsan_suppressions_arm64.txt \ | |
| python -m spin test -- -k "not test_casting_floatingpoint_errors" -v -s --timeout=600 --durations=10 | |
| clang_TSAN: | |
| # To enable this workflow on a fork, comment out: | |
| if: github.repository == 'numpy/numpy' | |
| runs-on: ubuntu-latest | |
| container: | |
| image: ghcr.io/nascheme/numpy-tsan:3.14t | |
| options: --shm-size=2g # increase memory for large matrix ops | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| - name: Trust working directory and initialize submodules | |
| run: | | |
| git config --global --add safe.directory /__w/numpy/numpy | |
| git submodule update --init --recursive | |
| - name: Uninstall pytest-xdist (conflicts with TSAN) | |
| run: pip uninstall -y pytest-xdist | |
| - name: Upgrade spin (gh-29777) | |
| run: pip install -U spin | |
| - name: Build NumPy with ThreadSanitizer | |
| run: python -m spin build -- -Db_sanitize=thread | |
| - name: Run tests under prebuilt TSAN container | |
| run: | | |
| export TSAN_OPTIONS="halt_on_error=0:allocator_may_return_null=1:suppressions=$GITHUB_WORKSPACE/tools/ci/tsan_suppressions.txt" | |
| echo "TSAN_OPTIONS=$TSAN_OPTIONS" | |
| python -m spin test \ | |
| `find numpy -name "test*.py" | xargs grep -l "import threading" | tr '\n' ' '` \ | |
| -- -v -s --timeout=600 --durations=10 |