Skip to content

refactor(#837): decouple allocator from QSBR, make art_allocator.hpp header-only #2653

refactor(#837): decouple allocator from QSBR, make art_allocator.hpp header-only

refactor(#837): decouple allocator from QSBR, make art_allocator.hpp header-only #2653

Workflow file for this run

---
name: build-with-old-compilers
on:
push:
branches:
- master
pull_request:
env:
DEFAULT_SANITIZE_ADDRESS: OFF
DEFAULT_SANITIZE_THREAD: OFF
DEFAULT_SANITIZE_UB: OFF
DEFAULT_SPINLOCK_LOOP: PAUSE
DEFAULT_STATS: ON
permissions: {}
jobs:
build:
runs-on: ubuntu-22.04
env:
BUILD_TYPE: ${{matrix.BUILD_TYPE}}
COMPILER: ${{matrix.COMPILER}}
VERSION: ${{matrix.VERSION}}
SANITIZE_ADDRESS: ${{matrix.SANITIZE_ADDRESS}}
SANITIZE_THREAD: ${{matrix.SANITIZE_THREAD}}
SANITIZE_UB: ${{matrix.SANITIZE_UB}}
SPINLOCK_LOOP: ${{matrix.SPINLOCK_LOOP}}
STATS: ${{matrix.STATS}}
strategy:
fail-fast: false
matrix:
include:
- name: clang 11 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 11
- name: clang 11 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 11
- name: clang 11 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 11
- name: clang 11 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 11
- name: clang 11 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 11
- name: clang 11 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 11
- name: clang 11 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 11
- name: clang 11 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 11
- name: clang 12 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 12
- name: clang 12 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 12
- name: clang 12 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 12
- name: clang 12 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 12
- name: clang 12 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 12
- name: clang 12 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 12
- name: clang 12 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 12
- name: clang 12 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 12
- name: clang 13 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 13 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 13
SPINLOCK_LOOP: EMPTY
- name: clang 14 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 14 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 14
STATS: OFF
- name: clang 15 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 15
- name: clang 15 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 15
- name: clang 15 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 15
- name: clang 15 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 15
- name: clang 15 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 15
- name: clang 15 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 15
- name: clang 15 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 15
- name: clang 15 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 15
- name: clang 16 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 16
- name: clang 16 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 16
- name: clang 16 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 16
- name: clang 16 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 16
- name: clang 16 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 16
- name: clang 16 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 16
- name: clang 16 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 16
- name: clang 16 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 16
- name: clang 17 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 17
- name: clang 17 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 17
- name: clang 17 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 17
- name: clang 17 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 17
- name: clang 17 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 17
- name: clang 17 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 17
- name: clang 17 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 17
- name: clang 17 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 17
- name: clang 18 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 18
- name: clang 18 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 18
- name: clang 18 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 18
- name: clang 18 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 18
- name: clang 18 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 18
- name: clang 18 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 18
- name: clang 18 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 18
- name: clang 18 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 18
- name: clang 19 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 19
- name: clang 19 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 19
- name: clang 19 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 19
- name: clang 19 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 19
- name: clang 19 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 19
- name: clang 19 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 19
- name: clang 19 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 19
- name: clang 19 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 19
- name: clang 20 Release
BUILD_TYPE: Release
COMPILER: clang
VERSION: 20
- name: clang 20 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 20
- name: clang 20 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 20
- name: clang 20 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: clang
VERSION: 20
- name: clang 20 Debug
BUILD_TYPE: Debug
COMPILER: clang
VERSION: 20
- name: clang 20 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: clang
VERSION: 20
- name: clang 20 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: clang
VERSION: 20
- name: clang 20 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: clang
VERSION: 20
- name: GCC 10 Release
BUILD_TYPE: Release
COMPILER: gcc
VERSION: 10
- name: GCC 10 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 10
- name: GCC 10 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 10
- name: GCC 10 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 10
- name: GCC 10 Debug
BUILD_TYPE: Debug
COMPILER: gcc
VERSION: 10
- name: GCC 10 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 10
- name: GCC 10 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 10
- name: GCC 10 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 10
- name: GCC 11 Release
BUILD_TYPE: Release
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Debug
BUILD_TYPE: Debug
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 11 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 11
SPINLOCK_LOOP: EMPTY
- name: GCC 12 Release
BUILD_TYPE: Release
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Debug
BUILD_TYPE: Debug
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 12 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 12
STATS: OFF
- name: GCC 13 Release
BUILD_TYPE: Release
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Release with ASan
BUILD_TYPE: Release
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Release with TSan
BUILD_TYPE: Release
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Release with UBSan
BUILD_TYPE: Release
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Debug
BUILD_TYPE: Debug
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Debug with ASan
BUILD_TYPE: Debug
SANITIZE_ADDRESS: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Debug with TSan
BUILD_TYPE: Debug
SANITIZE_THREAD: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
- name: GCC 13 Debug with UBSan
BUILD_TYPE: Debug
SANITIZE_UB: ON
COMPILER: gcc
VERSION: 13
STATS: OFF
steps:
- uses: actions/checkout@v6 # zizmor: ignore[unpinned-uses]
with:
submodules: true
persist-credentials: false
- name: Setup common dependencies
run: |
sudo apt-get update
sudo apt-get install -y libc6-dev-i386
- name: Setup Boost
run: sudo apt-get install -y libboost-dev
- name: Setup LLVM 16+ repo
run: |
curl 'https://apt.llvm.org/llvm-snapshot.gpg.key' \
| sudo apt-key add -
sudo add-apt-repository -y \
"deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-${VERSION} main"
sudo apt-get update
if: env.COMPILER == 'clang' && env.VERSION >= 16
- name: Setup dependencies for LLVM
run: |
sudo apt-get install -y "llvm-${VERSION}-linker-tools" \
"clang-${VERSION}" "clang-tidy-${VERSION}"
if: env.COMPILER == 'clang'
- name: Setup dependencies for GCC 10 & 12 (versioned packages)
run: |
sudo apt-get install -y "gcc-${VERSION}"
if: >
env.COMPILER == 'gcc'
&& (env.VERSION == '10' || env.VERSION == '12')
- name: Setup dependencies for GCC 11 (default OS package)
run: |
sudo apt-get install -y gcc
if: env.COMPILER == 'gcc' && env.VERSION == '11'
- name: Setup dependencies for GCC 13 (PPA)
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y "g++-${VERSION}"
if: env.COMPILER == 'gcc' && env.VERSION == '13'
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment
# variable access regardless of the host operating system
shell: bash
run: |
SANITIZE_ADDRESS="${SANITIZE_ADDRESS:-$DEFAULT_SANITIZE_ADDRESS}"
SANITIZE_THREAD="${SANITIZE_THREAD:-$DEFAULT_SANITIZE_THREAD}"
SANITIZE_UB="${SANITIZE_UB:-$DEFAULT_SANITIZE_UB}"
SPINLOCK_LOOP="${SPINLOCK_LOOP:-$DEFAULT_SPINLOCK_LOOP}"
STATS="${STATS:-$DEFAULT_STATS}"
export PATH=$HOME/.local/bin:$PATH
if [[ $COMPILER == "gcc" ]]; then
export CC="gcc-${VERSION}"
export CXX="g++-${VERSION}"
EXTRA_CMAKE_ARGS=("-DMAINTAINER_MODE=ON")
else
export CC="clang-${VERSION}"
export CXX="clang++-${VERSION}"
EXTRA_CMAKE_ARGS=("-DCLANG_TIDY_EXE=/usr/bin/clang-tidy-${VERSION}")
if [[ $BUILD_TYPE == "Release" ]]; then
EXTRA_CMAKE_ARGS=("${EXTRA_CMAKE_ARGS[@]}" \
"-DLLVMAR_EXECUTABLE=/usr/bin/llvm-ar-${VERSION}" \
"-DLLVMNM_EXECUTABLE=/usr/bin/llvm-nm-${VERSION}" \
"-DLLVMRANLIB_EXECUTABLE=/usr/bin/llvm-ranlib-${VERSION}")
fi
if [[ $VERSION -ge 13 ]]; then
EXTRA_CMAKE_ARGS=("${EXTRA_CMAKE_ARGS[@]}" "-DMAINTAINER_MODE=ON")
fi
fi
set +e
cmake -B build "$GITHUB_WORKSPACE" -DSTANDALONE=ON \
"-DCMAKE_BUILD_TYPE=$BUILD_TYPE" \
"-DSANITIZE_ADDRESS=${SANITIZE_ADDRESS}" \
"-DSANITIZE_THREAD=${SANITIZE_THREAD}" \
"-DSANITIZE_UB=${SANITIZE_UB}" \
"-DSPINLOCK_LOOP=${SPINLOCK_LOOP}" "-DSTATS=${STATS}" \
"${EXTRA_CMAKE_ARGS[@]}"
CMAKE_EXIT_CODE=$?
set -e
if [ $CMAKE_EXIT_CODE -ne 0 ]; then
if [ -f build/CMakeFiles/CMakeConfigureLog.yaml ]; then
echo "::group::CMakeConfigureLog.yaml"
cat build/CMakeFiles/CMakeConfigureLog.yaml
echo "::endgroup::"
fi
fi
exit $CMAKE_EXIT_CODE
- name: Build
working-directory: ${{github.workspace}}/build
run: make -j3 -k
- name: Correctness test
working-directory: ${{github.workspace}}/build
run: ctest -j3 -V
- name: Benchmark correctness test
working-directory: ${{github.workspace}}/build
run: make -k quick_benchmarks