diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index be45824..5f2dcad 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -13,11 +13,11 @@ env: DEBIAN_FRONTEND: noninteractive CMAKE_GENERATOR: Ninja DEFAULT_CXX_STANDARD: 23 - DEFAULT_LLVM_VERSION: 21 + DEFAULT_LLVM_VERSION: 22 DEFAULT_GCC_VERSION: 14 - MULL_LLVM_MAJOR_VERSION: 19 - MULL_LLVM_VERSION: 19.1.1 - MULL_VERSION: 0.27.1 + MULL_LLVM_MAJOR_VERSION: 20 + MULL_LLVM_VERSION: 20.1.2 + MULL_VERSION: 0.29.0 HYPOTHESIS_PROFILE: default concurrency: @@ -31,7 +31,7 @@ jobs: fail-fast: false matrix: compiler: [clang, gcc] - version: [12, 13, 14, 18, 19, 20, 21] + version: [12, 13, 14, 18, 19, 20, 21, 22] cxx_standard: [23] stdlib: [libstdc++, libc++] build_type: [Debug] @@ -40,62 +40,60 @@ jobs: cc: "clang" cxx: "clang++" cxx_flags: "-stdlib=libstdc++" + - version: 22 + compiler: clang + toolchain_root: "/usr/lib/llvm-22" + - version: 22 + compiler: clang + stdlib: libc++ + cxx_flags: "-stdlib=libc++" - version: 21 compiler: clang - install: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh 21 toolchain_root: "/usr/lib/llvm-21" - version: 21 compiler: clang stdlib: libc++ - install: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh 21 && sudo apt install -y libc++-21-dev libc++abi-21-dev cxx_flags: "-stdlib=libc++" - version: 20 compiler: clang - install: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh 20 toolchain_root: "/usr/lib/llvm-20" - version: 20 compiler: clang stdlib: libc++ - install: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh 20 && sudo apt install -y libc++-20-dev libc++abi-20-dev cxx_flags: "-stdlib=libc++" - version: 19 compiler: clang - install: sudo apt update && sudo apt install -y clang-19 toolchain_root: "/usr/lib/llvm-19" - version: 19 compiler: clang stdlib: libc++ - install: sudo apt update && sudo apt install -y clang-19 libc++-19-dev libc++abi-19-dev cxx_flags: "-stdlib=libc++" - version: 18 compiler: clang - install: sudo apt update && sudo apt install -y clang-18 toolchain_root: "/usr/lib/llvm-18" - version: 18 compiler: clang stdlib: libc++ - install: sudo apt update && sudo apt install -y clang-18 libc++-18-dev libc++abi-18-dev cxx_flags: "-stdlib=libc++" - compiler: gcc toolchain_root: "/usr" cxx_flags: "" - version: 14 compiler: gcc - install: sudo apt update && sudo apt install -y gcc-14 g++-14 cc: "gcc-14" cxx: "g++-14" - version: 13 compiler: gcc - install: sudo apt update && sudo apt install -y gcc-13 g++-13 cc: "gcc-13" cxx: "g++-13" - version: 12 compiler: gcc - install: sudo apt update && sudo apt install -y gcc-12 g++-12 cc: "gcc-12" cxx: "g++-12" cxx_flags: "" exclude: + - compiler: gcc + version: 22 - compiler: gcc version: 21 - compiler: gcc @@ -118,8 +116,14 @@ jobs: - name: Install build tools run: | - ${{ matrix.install }} - sudo apt install -y ninja-build python3-venv python3-pip + if [[ "${{matrix.compiler}}" == "clang" ]]; then + export DISTRO=$(lsb_release -cs) + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + sudo add-apt-repository -y deb https://apt.llvm.org/$DISTRO/ llvm-toolchain-$DISTRO-${{matrix.version}} main + sudo apt update && sudo apt install -y ninja-build clang-${{matrix.version}} libc++-${{matrix.version}}-dev libc++abi-${{matrix.version}}-dev + else + sudo apt update && sudo apt install -y ninja-build gcc-${{matrix.version}} g++-${{matrix.version}} + fi - name: Restore CPM cache env: @@ -176,16 +180,22 @@ jobs: - name: Checkout PR branch uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Setup python venv + run: | + python3 -m venv ${{github.workspace}}/test_venv + source ${{github.workspace}}/test_venv/bin/activate + echo "${{github.workspace}}/test_venv/bin" >> $GITHUB_PATH + - name: Install build tools run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh ${{env.DEFAULT_LLVM_VERSION}} - sudo apt install -y pipx ninja-build clang-tidy-${{env.DEFAULT_LLVM_VERSION}} clang-format-${{env.DEFAULT_LLVM_VERSION}} + export DISTRO=$(lsb_release -cs) + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + sudo add-apt-repository -y deb https://apt.llvm.org/$DISTRO/ llvm-toolchain-$DISTRO-${{env.DEFAULT_LLVM_VERSION}} main + sudo apt update && sudo apt install -y ninja-build clang-tidy-${{env.DEFAULT_LLVM_VERSION}} clang-format-${{env.DEFAULT_LLVM_VERSION}} - name: Install cmake-format run: | - pipx install cmakelang - pipx inject cmakelang pyyaml - echo "/opt/pipx_bin" >> $GITHUB_PATH + pip install cmakelang pyyaml - name: Restore CPM cache env: @@ -228,12 +238,10 @@ jobs: - compiler: clang cc: "clang" cxx: "clang++" - install: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh 21 - toolchain_root: "/usr/lib/llvm-21" + toolchain_root: "/usr/lib/llvm-22" - compiler: gcc cc: "gcc-14" cxx: "g++-14" - install: sudo apt update && sudo apt install -y gcc-14 g++-14 toolchain_root: "/usr" steps: @@ -241,8 +249,14 @@ jobs: - name: Install build tools run: | - ${{ matrix.install }} - sudo apt install -y ninja-build python3-venv python3-pip + if [[ "${{matrix.compiler}}" == "clang" ]]; then + export DISTRO=$(lsb_release -cs) + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + sudo add-apt-repository -y deb https://apt.llvm.org/$DISTRO/ llvm-toolchain-$DISTRO-${{env.DEFAULT_LLVM_VERSION}} main + sudo apt update && sudo apt install -y ninja-build clang-${{env.DEFAULT_LLVM_VERSION}} + else + sudo apt update && sudo apt install -y ninja-build ${{matrix.cc}} ${{matrix.cxx}} + fi - name: Restore CPM cache env: @@ -373,8 +387,10 @@ jobs: - name: Install build tools run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" llvm.sh ${{env.MULL_LLVM_MAJOR_VERSION}} - sudo apt install -y ninja-build python3-venv python3-pip + export DISTRO=$(lsb_release -cs) + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + sudo add-apt-repository -y deb https://apt.llvm.org/$DISTRO/ llvm-toolchain-$DISTRO-${{env.MULL_LLVM_MAJOR_VERSION}} main + sudo apt update && sudo apt install -y ninja-build clang-${{env.MULL_LLVM_MAJOR_VERSION}} - name: Install mull env: diff --git a/include/stdx/bitset.hpp b/include/stdx/bitset.hpp index 04bfc0f..011c1ea 100644 --- a/include/stdx/bitset.hpp +++ b/include/stdx/bitset.hpp @@ -40,7 +40,7 @@ class bitset { constexpr static auto lastmask = []() -> elem_t { if constexpr (N % storage_elem_size != 0) { - return allbits >> (storage_elem_size - N % storage_elem_size); + return allbits >> (storage_elem_size - (N % storage_elem_size)); } else { return allbits; } diff --git a/include/stdx/rollover.hpp b/include/stdx/rollover.hpp index 3f9886c..4718b4c 100644 --- a/include/stdx/rollover.hpp +++ b/include/stdx/rollover.hpp @@ -143,6 +143,8 @@ template rollover_t(T) -> rollover_t; } // namespace v1 } // namespace stdx +// NOLINTBEGIN(bugprone-std-namespace-modification) + template struct std::common_type, stdx::rollover_t> { using type = stdx::rollover_t>; @@ -153,3 +155,5 @@ struct std::common_type, I> { using type = stdx::rollover_t>>; }; + +// NOLINTEND(bugprone-std-namespace-modification) diff --git a/include/stdx/tuple_destructure.hpp b/include/stdx/tuple_destructure.hpp index c7bb0b3..8277b64 100644 --- a/include/stdx/tuple_destructure.hpp +++ b/include/stdx/tuple_destructure.hpp @@ -9,6 +9,8 @@ #include #include +// NOLINTBEGIN(bugprone-std-namespace-modification) + template struct std::tuple_size> : std::integral_constant {}; @@ -26,4 +28,6 @@ struct std::tuple_element> std::remove_cvref_t>()[stdx::index])>> {}; +// NOLINTEND(bugprone-std-namespace-modification) + #endif diff --git a/include/stdx/utility.hpp b/include/stdx/utility.hpp index 099baa8..b21c741 100644 --- a/include/stdx/utility.hpp +++ b/include/stdx/utility.hpp @@ -148,7 +148,7 @@ template } else if constexpr (sizeof(T) > sizeof(U)) { return (sz * sizeof(T) / sizeof(U)) + (sizeof(T) % sizeof(U) > 0); } else { - return (sz * sizeof(T) + sizeof(U) - 1) / sizeof(U); + return ((sz * sizeof(T)) + sizeof(U) - 1) / sizeof(U); } } } // namespace detail @@ -300,6 +300,8 @@ constexpr auto get(make_integer_sequence) { } // namespace v1 } // namespace stdx +// NOLINTBEGIN(bugprone-std-namespace-modification) + template struct std::tuple_size> : std::integral_constant {}; @@ -307,6 +309,8 @@ template struct std::tuple_element> : stdx::type_identity> {}; +// NOLINTEND(bugprone-std-namespace-modification) + // NOLINTBEGIN(cppcoreguidelines-macro-usage) #ifndef FWD