name: clang-c++23 on: push: branches: [ master, development, pull-request/* ] paths: - '.github/workflows/**' - 'include/**' - 'test/**' - 'CMakeLists.txt' - 'cmake/**' - 'BUILD.bazel' - 'MODULE.bazel*' - 'meson.build' - 'meson_options.txt' - 'subprojects/**' - '.devcontainer/**' pull_request: branches: [ master, development, pull-request/* ] types: [opened, synchronize, reopened] paths: - '.github/workflows/**' - 'include/**' - 'test/**' - 'CMakeLists.txt' - 'cmake/**' - 'BUILD.bazel' - 'MODULE.bazel*' - 'meson.build' - 'meson_options.txt' - 'subprojects/**' - '.devcontainer/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build-clang-cpp23-linux-stl-libcxx: name: Clang C++23 Linux - STL - libc++ runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-24.04] steps: - uses: actions/checkout@v6.0.3 - name: Install libc++ run: | sudo apt-get update sudo apt-get install -y libc++-dev libc++abi-dev - name: Build run: | export CC=clang export CXX=clang++ export CXXFLAGS="-stdlib=libc++" export LDFLAGS="-stdlib=libc++" cmake -D BUILD_TESTS=ON -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests # The system libc++/libc++abi are not built with ASan. Exception objects # (e.g. std::runtime_error's reference counted string) are allocated with # operator new inside libc++.so, but released with free() inside # libc++abi.so, which AddressSanitizer reports as an alloc-dealloc-mismatch. # This is a libc++ packaging issue, not an ETL defect, so the check is # disabled for this job only. env: ASAN_OPTIONS: alloc_dealloc_mismatch=0 run: ./test/etl_tests -v build-clang-cpp23-linux-no-stl: name: Clang C++23 Linux - No STL runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-24.04] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -DBUILD_TESTS=ON -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp23-linux-stl-force-cpp03: name: Clang C++23 Linux - STL - Force C++03 runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-24.04] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp2-linux-no-stl-force-cpp03: name: Clang C++23 Linux - No STL - Force C++03 runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-24.04] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp23-osx-stl: name: Clang C++23 OSX - STL runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-15] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp23-osx-no-stl: name: Clang C++23 OSX - No STL runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-15] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp23-osx-stl-force-cpp03: name: Clang C++23 OSX - STL - Force C++03 runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-15] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v build-clang-cpp23-osx-no-stl-force-cpp03: name: Clang C++23 OSX - No STL - Force C++03 runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-15] steps: - uses: actions/checkout@v6.0.3 - name: Build run: | export CC=clang export CXX=clang++ cmake -D BUILD_TESTS=ON -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON -DETL_CXX_STANDARD=23 -DETL_OPTIMISATION=-O3 -DETL_ENABLE_SANITIZER=ON ./ clang --version make -j "$(getconf _NPROCESSORS_ONLN)" - name: Run tests run: ./test/etl_tests -v