Skip to content

Thread Sanitizer Fixes #882

Thread Sanitizer Fixes

Thread Sanitizer Fixes #882

Workflow file for this run

name: CI
on: [push, pull_request]
# Cancel the current workflow if a newer commit gets pushed to the
# branch or PR that triggered it.
concurrency:
group: ${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
linux-gcc:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
gcc_version: [9, 10, 11, 12, 13]
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
env:
CC: gcc-${{ matrix.gcc_version }}
CXX: g++-${{ matrix.gcc_version }}
steps:
- uses: actions/checkout@v4
- name: install compiler
run: sudo apt-get install gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build qthreads
run: |
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }}
make -j2
make tests -j2
- name: make check
run: timeout -k 10s --foreground 3m make check
timeout-minutes: 4
linux-clang:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
clang_version: [14, 15, 16, 17, 18]
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
include:
- clang_version: 14
gcc_version: 11
- clang_version: 15
gcc_version: 12
- clang_version: 16
gcc_version: 13
- clang_version: 17
gcc_version: 13
- clang_version: 18
gcc_version: 13
env:
CC: clang-${{ matrix.clang_version }}
CXX: clang++-${{ matrix.clang_version }}
steps:
- uses: actions/checkout@v4
- name: install gcc
run: sudo apt-get install gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
- name: install clang
run: sudo apt-get install clang-${{ matrix.clang_version }}
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build qthreads
run: |
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }}
make -j2
make tests -j2
- name: make check
run: timeout -k 10s --foreground 6m make check
timeout-minutes: 7
linux-icx:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
env:
CC: icx
CXX: icpx
steps:
- uses: actions/checkout@v4
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-14 g++-14
- name: install icx
run: |
wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.repos.intel.com/oneapi all main' && break || sleep 1
sudo apt-get install intel-oneapi-compiler-dpcpp-cpp-2024.2
source /opt/intel/oneapi/setvars.sh
icx -v
- name: build qthreads
run: |
source /opt/intel/oneapi/setvars.sh
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }} || cat config.log
make -j2
make tests -j2
- name: make check
run: |
source /opt/intel/oneapi/setvars.sh
timeout -k 10s --foreground 6m make check
timeout-minutes: 7
linux-icc:
runs-on: ubuntu-22.04
continue-on-error: true
strategy:
matrix:
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
env:
CC: icc
CXX: icpc
CFLAGS: "-diag-disable=10441"
CXXFLAGS: "-diag-disable=10441"
steps:
- uses: actions/checkout@v4
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-12 g++-12 # last compatible gcc version for icpc
- name: install icc
run: |
wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.repos.intel.com/oneapi all main' && break || sleep 1
sudo apt-get install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.2.4
source /opt/intel/oneapi/setvars.sh
icc -v
- name: build qthreads
run: |
source /opt/intel/oneapi/setvars.sh
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }} || cat config.log
make -j2
make tests -j2
- name: make check
run: |
source /opt/intel/oneapi/setvars.sh
timeout -k 10s --foreground 6m make check
timeout-minutes: 7
linux-aocc:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
env:
CC: clang
CXX: clang++
steps:
- uses: actions/checkout@v4
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-13 g++-13
- name: install aocc
run: |
wget -nv -O aocc.deb https://download.amd.com/developer/eula/aocc/aocc-4-2/aocc-compiler-4.2.0_1_amd64.deb
sudo apt install -y ./aocc.deb
clang -v
- name: build qthreads
run: |
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }} || cat config.log
make -j2
make tests -j2
- name: make check
run: |
timeout -k 10s --foreground 6m make check
timeout-minutes: 7
mac:
runs-on: macos-latest
continue-on-error: true
strategy:
matrix:
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
use_asserts: [true, false]
env:
QTHREADS_ENABLE_ASSERTS: ${{ matrix.use_asserts && '--enable-asserts' || '' }}
steps:
- uses: actions/checkout@v4
- name: install deps
run: |
brew install autoconf automake libtool coreutils # coreutils is to get gtimeout for CI and is not universally required by qthreads.
- if: ${{ matrix.topology != 'no' }}
run: |
brew install hwloc
hwloc-ls --version
- name: build qthreads
run: |
export CFLAGS="-I$(brew --prefix)/include $CFLAGS"
export CXXFLAGS="-I$(brew --prefix)/include $CXXFLAGS"
export LDFLAGS="-L$(brew --prefix)/lib $LDFLAGS"
./autogen.sh
./configure $QTHREADS_ENABLE_ASSERTS --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }}
make -j3
make tests -j3
- name: make check
run: |
# commented example for how to get a backtrace from CI usign lldb on OSX:
#echo "settings set target.process.stop-on-exec false" > ~/.lldbinit
#QT_NUM_SHEPHERDS=2 QT_NUM_WORKERS_PER_SHEPHERD=1 lldb bash --batch --one-line 'process launch' --one-line-on-crash 'bt' --one-line-on-crash 'quit' -- test/basics/hello_world
gtimeout -k 10s --foreground 8m make check
timeout-minutes: 9
sanitizers:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
sanitizer: [address, memory, thread, undefined]
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
use_libcxx: [false] # disable testing on libcxx since its effect seems very limited for now.
exclude:
- sanitizer: memory
topology: hwloc
- sanitizer: memory
topology: binders
- sanitizer: thread
scheduler: sherwood
- sanitizer: thread
scheduler: distrib
env:
CC: clang-19
CXX: clang++-19
CFLAGS: "-fsanitize=${{ matrix.sanitizer }} -fno-sanitize-recover=all"
CXXFLAGS: ${{ matrix.use_libcxx && format('-stdlib=libc++ -fsanitize={0} -fno-sanitize-recover=all', matrix.sanitizer) || format('-fsanitize={0} -fno-sanitize-recover=all', matrix.sanitizer) }}
LDFLAGS: "-fsanitize=${{ matrix.sanitizer }} -fno-sanitize-recover=all"
QTHREAD_STACK_SIZE: 2097152
ASAN_OPTIONS: "check_initialization_order=1"
steps:
- uses: actions/checkout@v4
- if: ${{ ! matrix.use_libcxx }}
run: |
sudo apt-get install gcc-14 g++-14
- name: install compiler
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main' && break || sleep 1
sudo apt-get install clang-19
- if: ${{ matrix.use_libcxx }}
run: sudo apt-get install libc++-19-dev libc++abi-19-dev
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build qthreads
run: |
./autogen.sh
./configure --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }}
make -j2
make tests -j2
- name: make check
run: |
if [[ "${{ matrix.sanitizer }}" == "thread" ]]; then cd test/basics; fi
timeout -k 10s --foreground 8m make check
timeout-minutes: 9
linux-thorough:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
compiler: [gcc, clang]
scheduler: [nemesis, sherwood, distrib]
topology: [hwloc, binders, no]
use_libcxx: [false] # disable testing on libcxx since its effect seems very limited for now.
use_asserts: [true, false]
exclude:
- compiler: gcc
use_libcxx: true
env:
CC: ${{ matrix.compiler == 'gcc' && 'gcc-14' || 'clang-19' }}
CXX: ${{ matrix.compiler == 'gcc' && 'g++-14' || 'clang++-19' }}
CXXFLAGS: ${{ matrix.use_libcxx && '-stdlib=libc++' || '' }}
QTHREADS_ENABLE_ASSERTS: ${{ matrix.use_asserts && '--enable-asserts' || '' }}
steps:
- uses: actions/checkout@v4
- run: |
sudo apt-get install gcc-14 g++-14
- if: ${{ matrix.compiler == 'clang' }}
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main' && break || sleep 1
sudo apt-get install clang-19
- if: ${{ matrix.use_libcxx }}
run: sudo apt-get install libc++-19-dev libc++abi-19-dev
- if: ${{ matrix.topology != 'no' }}
run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build qthreads
run: |
./autogen.sh
./configure $QTHREADS_ENABLE_ASSERTS --enable-picky --with-scheduler=${{ matrix.scheduler }} --with-topology=${{ matrix.topology }}
make -j2
make tests -j2
- name: make check
run: timeout -k 10s --foreground 6m make check
timeout-minutes: 7
clang-format:
runs-on: ubuntu-24.04
continue-on-error: true
env:
CC: 'clang-19'
CXX: 'clang++-19'
steps:
- uses: actions/checkout@v4
- run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main' && break || sleep 1
sudo apt-get install clang-format-19
- name: check formatting
run: |
clang-format --version
sh clang-format.sh
git --no-pager diff
if [[ $(git --no-pager diff) ]]; then echo "need to rerun clang-format"; exit 1; fi