From 44a8ae2ba3259210b2644d4029b57ed4c8dab7ec Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Tue, 25 Aug 2026 23:45:51 -0700 Subject: [PATCH 1/2] CI: pin the Clang jobs below AVX-512 The Clang jobs that use libstdc++ started failing without a commit to blame. libstdc++'s does not compile under Clang for the AVX-512 mask ABIs: simd_x86.h:4232: static assertion failed due to requirement 'is_same_v' _MaskImplX86Mixin::_S_to_bits asserts is_same_v<_Tp, __int_for_sizeof_t<_Tp>>, and under Clang __int_for_sizeof_t is long, so simd>::operator== never instantiates. GCC compiles the same code. The testsuite builds with -march=native, so what the job covers depends on the CPU the runner happens to have. That changed under us: the fleet moved to AVX-512 capable hardware, -march=native started selecting the mask ABIs, and a job that had been green went red on an unchanged tree. Pin those jobs to x86-64-v3, which every x86-64 runner supports, so the Clang coverage stops depending on the runner. GCC keeps -march=native and keeps testing AVX-512 where the runner offers it. clang-libcxx is untouched: with libc++ there is no , so vir-simd uses its own and never reaches this code. The bug itself belongs to libstdc++, and this only stops it from deciding whether CI is green. --- .github/workflows/Clang.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Clang.yml b/.github/workflows/Clang.yml index 21c8d77..2e40854 100644 --- a/.github/workflows/Clang.yml +++ b/.github/workflows/Clang.yml @@ -53,7 +53,15 @@ jobs: path: vc-testdata - name: Run test suite - run: cd vir-simd && make check DRIVEROPTS=-vvf + # Pinned below AVX-512 on purpose. libstdc++'s does + # not compile under Clang for the AVX-512 mask ABIs: _S_to_bits asserts + # is_same_v<_Tp, __int_for_sizeof_t<_Tp>>, and for _Tp = long long that + # is false there, so simd>::operator== fails to + # instantiate. The testsuite otherwise builds with -march=native, so + # this job started failing when the runner fleet moved to AVX-512 + # capable hardware, with nothing in this repository having changed. + # GCC compiles the same code, and keeps -march=native. + run: cd vir-simd && make check DRIVEROPTS=-vvf testflags=-march=x86-64-v3 clang-libcxx: strategy: From f5a5d174feb5e203a227388db78de696333d8eb1 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Wed, 26 Aug 2026 00:16:52 -0700 Subject: [PATCH 2/2] CI: pin the GCC jobs below AVX-512 as well The Clang jobs were not the only ones the runner fleet moved under. simd_abi::max_fixed_size is 32, so an AVX-512 simd, which has 64 lanes, has no int ABI to match it. Two of the tests walk into that: for_each.cc count_if wants deduced_simd, which has no type transform.cc widening char to int asks for simd>, whose destructor libstdc++ deletes transform fails the same way on GCC 11, 12 and 13, so this is not one version's bug. And because the fleet is mixed, whether a job saw any of it came down to which machine it landed on: GCC 11 passed one run and failed the next on an unchanged tree. Pin these jobs the same way, so what CI covers stops depending on the runner. The AVX-512 coverage this gives up was never dependable -- where a runner did offer it, these tests did not compile. Fixing the algorithms is worthwhile separately; count_if is #56. This is only about CI reporting something reproducible. --- .github/workflows/GCC.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/GCC.yml b/.github/workflows/GCC.yml index bfcd096..881c4cf 100644 --- a/.github/workflows/GCC.yml +++ b/.github/workflows/GCC.yml @@ -65,4 +65,11 @@ jobs: diff -r $HOME/vir-simd-cmake/include $HOME/vir-simd-make/include && echo "cmake and make installations match ✅" - name: Run test suite - run: cd vir-simd && make check DRIVEROPTS=-vvf + # Pinned below AVX-512, as the Clang jobs are, though for a + # different reason. simd_abi::max_fixed_size is 32, so on + # AVX-512 a 64-lane simd has no matching int ABI: transform + # widening char to int asks for simd>, which + # libstdc++ gives a deleted destructor. The testsuite otherwise + # builds -march=native, and the runner fleet is mixed, so whether a + # job saw this came down to which machine it landed on. + run: cd vir-simd && make check DRIVEROPTS=-vvf testflags=-march=x86-64-v3