From f29e98fb5b688196d1da0140f762ce7b285a8a60 Mon Sep 17 00:00:00 2001 From: Aishwarya Mathuria Date: Thu, 26 Feb 2026 11:02:51 +0000 Subject: [PATCH] cmake: explicitly support and enable vptr sanitizer As of Clang 21, -fsanitize=undefined no longer implies vptr. This adds vptr as an explicit component and provides the necessary compile options to satisfy Seastar's build requirements. See: https://github.com/scylladb/seastar/commit/c1060ea7d4676df23ce62af96ef2daa768f5de8a for more details Signed-off-by: Aishwarya Mathuria --- cmake/modules/FindSanitizers.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindSanitizers.cmake b/cmake/modules/FindSanitizers.cmake index 1401ca2442b..c3dcd85bfd7 100644 --- a/cmake/modules/FindSanitizers.cmake +++ b/cmake/modules/FindSanitizers.cmake @@ -1,6 +1,6 @@ if(NOT Sanitizers_FIND_COMPONENTS) set(Sanitizers_FIND_COMPONENTS - address undefined_behavior) + address undefined_behavior vptr) endif() if(HAVE_JEMALLOC) message(WARNING "JeMalloc does not work well with sanitizers") @@ -23,7 +23,11 @@ foreach(component ${Sanitizers_FIND_COMPONENTS}) set(Sanitizers_thread_COMPILE_OPTIONS "-fsanitize=thread") elseif(component STREQUAL "undefined_behavior") # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88684 - set(Sanitizers_undefined_behavior_COMPILE_OPTIONS "-fsanitize=undefined;-fno-sanitize=vptr") + set(Sanitizers_undefined_behavior_COMPILE_OPTIONS "-fsanitize=undefined") + elseif (component STREQUAL "vptr") + # since Clang version 21, -fsanitize=undefined no longer implies vptr, + # so we enable it explicitly + set(Sanitizers_vptr_COMPILE_OPTIONS "-fno-sanitize=vptr") else() message(SEND_ERROR "Unsupported sanitizer: ${component}") endif()