@@ -88,6 +88,8 @@ set(CLANG_LT_13_CXX_WARNING_FLAGS "-Wreserved-id-macro")
8888set (CLANG_GE_13_CXX_WARNING_FLAGS "-Wreserved-identifier" )
8989# Do not enable clang 16+ -Wunsafe-buffer-usage because it warns on all memcpy
9090# calls and our pointer- and span-like class implementations.
91+ set (CLANG_GE_21_CXX_WARNING_FLAGS "-Wnrvo" "-Wunique-object-duplication"
92+ "-Wshift-bool" "-Wc99-designator" "-Wms-bitfield-padding" )
9193
9294set (GCC_CXX_WARNING_FLAGS
9395 # Warning groups
@@ -296,6 +298,9 @@ if(SANITIZE_UB)
296298 if (is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)
297299 list (APPEND SANITIZER_CXX_FLAGS "-fsanitize=implicit-bitfield-conversion" )
298300 endif ()
301+ if (is_clang AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 21.0)
302+ list (APPEND SANITIZER_CXX_FLAGS "-fsanitize=vptr" )
303+ endif ()
299304 endif ()
300305
301306 set (SANITIZER_LD_FLAGS "-fsanitize=undefined" )
@@ -402,9 +407,13 @@ set(cxx_ge_12 "$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,12.0>")
402407set (cxx_lt_13 "$<VERSION_LESS :$<CXX_COMPILER_VERSION >,13.0>" )
403408set (cxx_ge_13 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,13.0>" )
404409set (cxx_ge_14 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,14.0>" )
410+ set (cxx_ge_21 "$<VERSION_GREATER_EQUAL :$<CXX_COMPILER_VERSION >,21.0>" )
405411set (is_clang_lt_13_not_windows "$<AND :${is_clang_not_windows} ,${cxx_lt_13} >" )
406412set (is_clang_ge_13_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_13} >" )
407413set (is_clang_ge_14_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_14} >" )
414+ set (is_clang_ge_21_not_windows "$<AND :${is_clang_not_windows} ,${cxx_ge_21} >" )
415+ set (is_darwin_clang_ge_21_x86_64 "$<AND :$<PLATFORM_ID :Darwin >,${is_clang_ge_21_not_windows} ,${is_not_windows_x86_64} >" )
416+ set (is_darwin_clang_ge_21_arm64 "$<AND :$<PLATFORM_ID :Darwin >,${is_clang_ge_21_not_windows} ,$<NOT :${is_not_windows_x86_64} >>" )
408417set (is_gxx_ge_11 "$<AND :${is_gxx_genex} ,${cxx_ge_11} >" )
409418set (is_gxx_ge_12 "$<AND :${is_gxx_genex} ,${cxx_ge_12} >" )
410419set (is_gxx_ge_14 "$<AND :${is_gxx_genex} ,${cxx_ge_14} >" )
@@ -674,7 +683,7 @@ if(IWYU)
674683 IWYU_VERSION_OUTPUT )
675684 message (STATUS
676685 "include-what-you-use found: ${IWYU_EXE} , --version: ${IWYU_VERSION_OUTPUT} " )
677- set (DO_IWYU "${IWYU_EXE} " )
686+ set (DO_IWYU "${IWYU_EXE} ;-Wno-unknown-warning-option " )
678687 endif ()
679688 endif ()
680689endif ()
@@ -709,6 +718,7 @@ function(COMMON_TARGET_PROPERTIES TARGET)
709718 "$<$<AND :${is_standalone} ,${is_any_clang_genex} ,${is_not_windows} >:${CLANG_CXX_WARNING_FLAGS} >"
710719 "$<$<AND :${is_standalone} ,${is_clang_lt_13_not_windows} >:${CLANG_LT_13_CXX_WARNING_FLAGS} >"
711720 "$<$<AND :${is_standalone} ,${is_clang_ge_13_not_windows} >:${CLANG_GE_13_CXX_WARNING_FLAGS} >"
721+ "$<$<AND :${is_standalone} ,${is_clang_ge_21_not_windows} >:${CLANG_GE_21_CXX_WARNING_FLAGS} >"
712722 "$<$<AND :${is_standalone} ,${is_gxx_genex} >:${GCC_CXX_WARNING_FLAGS} >"
713723 "$<$<AND :${is_standalone} ,${is_gxx_ge_11} >:${GCC_GE_11_CXX_WARNING_FLAGS} >"
714724 "$<$<AND :${is_standalone} ,${is_gxx_ge_12} >:${GCC_GE_12_CXX_WARNING_FLAGS} >"
@@ -721,6 +731,10 @@ function(COMMON_TARGET_PROPERTIES TARGET)
721731 target_link_options (${TARGET} INTERFACE "$<${coverage_on} :--coverage >" )
722732 target_link_options (${TARGET} PRIVATE
723733 "$<${is_apple_clang_genex} :-Wl ,-no_warn_duplicate_libraries >"
734+ "$<${is_darwin_clang_ge_21_x86_64} :-L /usr /local /opt /llvm /lib /c ++>"
735+ "$<${is_darwin_clang_ge_21_x86_64} :-Wl ,-rpath ,/usr /local /opt /llvm /lib /c ++>"
736+ "$<${is_darwin_clang_ge_21_arm64} :-L /opt /homebrew /opt /llvm /lib /c ++>"
737+ "$<${is_darwin_clang_ge_21_arm64} :-Wl ,-rpath ,/opt /homebrew /opt /llvm /lib /c ++>"
724738 "${SANITIZER_LD_FLAGS} "
725739 )
726740 target_link_libraries (${TARGET} PRIVATE
0 commit comments