From 0da9c7077456e3d8799bf50267954165ce0f241a Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 17 Mar 2026 14:57:24 +0100 Subject: [PATCH] PS-10624 feature: Update build scripts to use clang-20 toolset (re-enable clang ASan runs) https://perconadev.atlassian.net/browse/PS-10624 CMake presets for Boost, AWS SDK C++ and the main projects now use 'clang-20'. GitHub Actions scripts now use 'clang20_xxx' presets instead of 'clang1_xxx'. Clang Format and Clang Tidy invocations in GitHub Actions scripts changed to version 20. Fixed new clang-20-specific Clang Tidy warnings in the source code. Minor formatting fixes cause by clang-format-20. Verified that "-stdlib=libc++ -fsanitize=address" alloc-dealloc-mismatch issue (https://github.com/llvm/llvm-project/issues/59432) is now fixed in clang-20. Because of that re-enabled MTR and CTest runs in the "Clang 20 ASan" GitHub Actions configuration. --- .github/workflows/cmake.yml | 36 +++++++++---------- CMakePresets.json | 24 ++++++------- README.md | 4 +-- .../aws-sdk-cpp/CMakePresets.json | 24 ++++++------- extra/cmake_presets/boost/CMakePresets.json | 24 ++++++------- src/binsrv/events/event.hpp | 2 +- src/binsrv/main_config.hpp | 4 +-- src/binsrv/s3_storage_backend.cpp | 3 +- 8 files changed, 58 insertions(+), 63 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b489869..c1409e9 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -42,14 +42,14 @@ jobs: - name: Install dependencies on ubuntu run: | sudo apt-get update - sudo apt-get install clang-format-19 + sudo apt-get install clang-format-20 - name: Info Clang Format - run: clang-format-19 --version + run: clang-format-20 --version - - name: Check formatting with git clang-format-19 + - name: Check formatting with git clang-format-20 working-directory: ${{github.workspace}}/src - run: git clang-format-19 --diff --binary=clang-format-19 HEAD~ + run: git clang-format-20 --diff --binary=clang-format-20 HEAD~ build: # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. @@ -81,27 +81,23 @@ jobs: run_ctest: true } - { - name: "Clang 19 Debug", - label: "debug_clang19", + name: "Clang 20 Debug", + label: "debug_clang20", run_clang_tidy: true, run_ctest: true } - { - name: "Clang 19 RelWithDebInfo", - label: "release_clang19", + name: "Clang 20 RelWithDebInfo", + label: "release_clang20", run_clang_tidy: true, run_ctest: true } - { - name: "Clang 19 ASan", - label: "asan_clang19" - # TODO: re-enable running MTR under this "Clang XX ASan" - # run_mtr: true, - # mtr_options: "--sanitize", - # run_ctest: true - # when "-stdlib=libc++ -fsanitize=address" alloc-dealloc-mismatch issue is fixed - # (https://github.com/llvm/llvm-project/issues/59432) - # or CI is upgraded to Clang 20 + name: "Clang 20 ASan", + label: "asan_clang20", + run_mtr: true, + mtr_options: "--sanitize", + run_ctest: true } steps: @@ -131,7 +127,7 @@ jobs: - name: Install Clang dependencies on ubuntu if: startsWith(matrix.config.name, 'Clang') run: | - sudo apt-get install clang-19 lld-19 clang-tidy-19 libc++-19-dev libc++abi-19-dev + sudo apt-get install clang-20 lld-20 clang-tidy-20 libc++-20-dev libc++abi-20-dev - name: Install GCC dependencies on ubuntu if: startsWith(matrix.config.name, 'GCC') @@ -243,12 +239,12 @@ jobs: - name: Info Clang Tidy if: matrix.config.run_clang_tidy - run: clang-tidy-19 --version + run: clang-tidy-20 --version - name: Clang Tidy if: matrix.config.run_clang_tidy # Run Clang Tidy - run: run-clang-tidy-19 -header-filter=.* -j=${{steps.cpu-cores.outputs.count}} -use-color -p=${{github.workspace}}/src-build-${{matrix.config.label}} + run: run-clang-tidy-20 -header-filter=.* -j=${{steps.cpu-cores.outputs.count}} -use-color -p=${{github.workspace}}/src-build-${{matrix.config.label}} - name: Application version working-directory: ${{github.workspace}}/src-build-${{matrix.config.label}} diff --git a/CMakePresets.json b/CMakePresets.json index 2eeae69..46b3b02 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -53,11 +53,11 @@ } }, { - "name": "clang19_hidden", + "name": "clang20_hidden", "hidden": true, "cacheVariables": { - "CMAKE_C_COMPILER": "clang-19", - "CMAKE_CXX_COMPILER": "clang++-19", + "CMAKE_C_COMPILER": "clang-20", + "CMAKE_CXX_COMPILER": "clang++-20", "WITH_STDLIB_LIBCXX": "ON" } }, @@ -91,31 +91,31 @@ }, { - "name": "debug_clang19", + "name": "debug_clang20", "inherits": [ "common_hidden", "debug_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 Debug" + "displayName": "Clang 20 Debug" }, { - "name": "release_clang19", + "name": "release_clang20", "inherits": [ "common_hidden", "release_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 RelWithDebInfo" + "displayName": "Clang 20 RelWithDebInfo" }, { - "name": "asan_clang19", + "name": "asan_clang20", "inherits": [ "common_hidden", "asan_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 ASan" + "displayName": "Clang 20 ASan" } ] } diff --git a/README.md b/README.md index 2f2594f..a7fd64a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Currently prebuilt binaries are not available. #### Dependencies - [CMake](https://cmake.org/) 3.20.0+ -- [Clang](https://clang.llvm.org/) (`clang-15` .. `clang-19`) or [GCC](https://gcc.gnu.org/) (`gcc-12` .. `gcc-14`) +- [Clang](https://clang.llvm.org/) (`clang-15` .. `clang-20`) or [GCC](https://gcc.gnu.org/) (`gcc-12` .. `gcc-14`) - [Boost libraries](https://www.boost.org/) 1.88.0 (git version, not the source tarball) - [MySQL client library](https://dev.mysql.com/doc/c-api/8.0/en/) 8.0.x (`libmysqlclient`) - [CURL library](https://curl.se/libcurl/) (`libcurl`) 8.6.0+ @@ -44,7 +44,7 @@ Define `BUILD_PRESET` depending on whether you want to build in `Debug`, `Releas export BUILD_PRESET=_ ``` The supported values for `` are `debug`, `release`, and `asan`. -The supported values for `` are `gcc14` and `clang19`. +The supported values for `` are `gcc14` and `clang20`. For instance, if you want to build in `RelWithDebInfo` configuration using `GCC 14`, please specify ```bash diff --git a/extra/cmake_presets/aws-sdk-cpp/CMakePresets.json b/extra/cmake_presets/aws-sdk-cpp/CMakePresets.json index b903261..0ba16df 100644 --- a/extra/cmake_presets/aws-sdk-cpp/CMakePresets.json +++ b/extra/cmake_presets/aws-sdk-cpp/CMakePresets.json @@ -57,11 +57,11 @@ } }, { - "name": "clang19_hidden", + "name": "clang20_hidden", "hidden": true, "cacheVariables": { - "CMAKE_C_COMPILER": "clang-19", - "CMAKE_CXX_COMPILER": "clang++-19", + "CMAKE_C_COMPILER": "clang-20", + "CMAKE_CXX_COMPILER": "clang++-20", "CMAKE_CXX_FLAGS_INIT": "-stdlib=libc++" } }, @@ -95,31 +95,31 @@ }, { - "name": "debug_clang19", + "name": "debug_clang20", "inherits": [ "common_hidden", "debug_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 Debug" + "displayName": "Clang 20 Debug" }, { - "name": "release_clang19", + "name": "release_clang20", "inherits": [ "common_hidden", "release_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 RelWithDebInfo" + "displayName": "Clang 20 RelWithDebInfo" }, { - "name": "asan_clang19", + "name": "asan_clang20", "inherits": [ "common_hidden", "asan_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 ASan" + "displayName": "Clang 20 ASan" } ] } diff --git a/extra/cmake_presets/boost/CMakePresets.json b/extra/cmake_presets/boost/CMakePresets.json index 8361e26..cef9d27 100644 --- a/extra/cmake_presets/boost/CMakePresets.json +++ b/extra/cmake_presets/boost/CMakePresets.json @@ -53,11 +53,11 @@ } }, { - "name": "clang19_hidden", + "name": "clang20_hidden", "hidden": true, "cacheVariables": { - "CMAKE_C_COMPILER": "clang-19", - "CMAKE_CXX_COMPILER": "clang++-19" + "CMAKE_C_COMPILER": "clang-20", + "CMAKE_CXX_COMPILER": "clang++-20" }, "environment": { "STDLIB_FLAGS": "-stdlib=libc++" @@ -93,31 +93,31 @@ }, { - "name": "debug_clang19", + "name": "debug_clang20", "inherits": [ "common_hidden", "debug_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 Debug" + "displayName": "Clang 20 Debug" }, { - "name": "release_clang19", + "name": "release_clang20", "inherits": [ "common_hidden", "release_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 RelWithDebInfo" + "displayName": "Clang 20 RelWithDebInfo" }, { - "name": "asan_clang19", + "name": "asan_clang20", "inherits": [ "common_hidden", "asan_hidden", - "clang19_hidden" + "clang20_hidden" ], - "displayName": "Clang 19 ASan" + "displayName": "Clang 20 ASan" } ] } diff --git a/src/binsrv/events/event.hpp b/src/binsrv/events/event.hpp index d9aed11..4371089 100644 --- a/src/binsrv/events/event.hpp +++ b/src/binsrv/events/event.hpp @@ -34,7 +34,7 @@ #include "binsrv/events/anonymous_gtid_log_body_impl.hpp" // IWYU pragma: export #include "binsrv/events/anonymous_gtid_log_post_header_impl.hpp" // IWYU pragma: export #include "binsrv/events/code_type.hpp" -#include "binsrv/events/common_header.hpp" // IWYU pragma: export +#include "binsrv/events/common_header.hpp" // IWYU pragma: export #include "binsrv/events/common_header_flag_type.hpp" #include "binsrv/events/event_view_fwd.hpp" #include "binsrv/events/footer.hpp" // IWYU pragma: export diff --git a/src/binsrv/main_config.hpp b/src/binsrv/main_config.hpp index 7725d2a..c4c5d5f 100644 --- a/src/binsrv/main_config.hpp +++ b/src/binsrv/main_config.hpp @@ -18,9 +18,9 @@ #include "binsrv/main_config_fwd.hpp" // IWYU pragma: export -#include "binsrv/logger_config.hpp" // IWYU pragma: export +#include "binsrv/logger_config.hpp" // IWYU pragma: export #include "binsrv/replication_config.hpp" // IWYU pragma: export -#include "binsrv/storage_config.hpp" // IWYU pragma: export +#include "binsrv/storage_config.hpp" // IWYU pragma: export #include "easymysql/connection_config.hpp" // IWYU pragma: export diff --git a/src/binsrv/s3_storage_backend.cpp b/src/binsrv/s3_storage_backend.cpp index bcfa1cc..b20f419 100644 --- a/src/binsrv/s3_storage_backend.cpp +++ b/src/binsrv/s3_storage_backend.cpp @@ -297,8 +297,7 @@ void s3_storage_backend::aws_context::get_object_into_file( const auto end_position{ static_cast(content_stream.tellg())}; - if (!std::in_range(end_position) || - static_cast(end_position) != content_length) { + if (std::cmp_not_equal(end_position, content_length)) { util::exception_location().raise( "cannot read S3 object content into a file"); }