[llvm] Enable libc++ hardening mode for LLVM_ENABLE_ASSERTIONS (PR #130243)
Brian Cain via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 15 20:46:08 PST 2026
https://github.com/androm3da updated https://github.com/llvm/llvm-project/pull/130243
>From 6eebacaf957d010df8a9beec52cb05f023990f6b Mon Sep 17 00:00:00 2001
From: Brian Cain <brian.cain at oss.qualcomm.com>
Date: Thu, 6 Mar 2025 20:43:26 -0800
Subject: [PATCH 1/2] Enable libc++ hardening mode for LLVM_ENABLE_ASSERTIONS
Previously, this logic would apply a change to `LIBCXX_HARDENING_MODE`. But
`LIBCXX_HARDENING_MODE` is for changing the behavior of the libc++ build for
its target, not for specifying the behavior of the projects described
in `LLVM_ENABLE_PROJECTS`. The just-built C++ library is not used to
build these projects.
Now, LLVM_ENABLE_ASSERTIONS + LLVM_ENABLE_EXPENSIVE_CHECKS implies
_LIBCPP_HARDENING_MODE_DEBUG and LLVM_ENABLE_ASSERTIONS + !LLVM_ENABLE_EXPENSIVE_CHECKS
implies _LIBCPP_HARDENING_MODE_EXTENSIVE.
---
llvm/cmake/modules/HandleLLVMOptions.cmake | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
index 8b7c8cd4028bd..e8a83c264ab44 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -136,11 +136,12 @@ if( LLVM_ENABLE_ASSERTIONS )
# Enable assertions in libstdc++.
add_compile_definitions(_GLIBCXX_ASSERTIONS)
# Cautiously enable the extensive hardening mode in libc++.
- if((DEFINED LIBCXX_HARDENING_MODE) AND
- (NOT LIBCXX_HARDENING_MODE STREQUAL "extensive"))
- message(WARNING "LLVM_ENABLE_ASSERTIONS implies LIBCXX_HARDENING_MODE \"extensive\" but is overriden from command line with value \"${LIBCXX_HARDENING_MODE}\".")
- else()
- set(LIBCXX_HARDENING_MODE "extensive")
+ if (LLVM_ENABLE_LIBCXX AND NOT LLVM_ENABLE_EXPENSIVE_CHECKS)
+ append("-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE"
+ CMAKE_CXX_FLAGS)
+ elseif (LLVM_ENABLE_LIBCXX AND LLVM_ENABLE_EXPENSIVE_CHECKS)
+ append("-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG"
+ CMAKE_CXX_FLAGS)
endif()
endif()
>From 75bdbd12eba9998ffe2a134168435cfcf99b7a45 Mon Sep 17 00:00:00 2001
From: Brian Cain <brian.cain at oss.qualcomm.com>
Date: Sun, 15 Feb 2026 20:44:06 -0800
Subject: [PATCH 2/2] fixup! Enable libc++ hardening mode for
LLVM_ENABLE_ASSERTIONS
---
llvm/cmake/modules/HandleLLVMOptions.cmake | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
index e8a83c264ab44..a5d37093e2c3c 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -135,13 +135,17 @@ if( LLVM_ENABLE_ASSERTIONS )
endif()
# Enable assertions in libstdc++.
add_compile_definitions(_GLIBCXX_ASSERTIONS)
- # Cautiously enable the extensive hardening mode in libc++.
+ # Enable extensive hardening mode in libc++ for the host build.
if (LLVM_ENABLE_LIBCXX AND NOT LLVM_ENABLE_EXPENSIVE_CHECKS)
append("-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE"
CMAKE_CXX_FLAGS)
- elseif (LLVM_ENABLE_LIBCXX AND LLVM_ENABLE_EXPENSIVE_CHECKS)
- append("-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG"
- CMAKE_CXX_FLAGS)
+ endif()
+ # Cautiously enable the extensive hardening mode in libc++.
+ if((DEFINED LIBCXX_HARDENING_MODE) AND
+ (NOT LIBCXX_HARDENING_MODE STREQUAL "extensive"))
+ message(WARNING "LLVM_ENABLE_ASSERTIONS implies LIBCXX_HARDENING_MODE \"extensive\" but is overriden from command line with value \"${LIBCXX_HARDENING_MODE}\".")
+ else()
+ set(LIBCXX_HARDENING_MODE "extensive")
endif()
endif()
@@ -168,6 +172,11 @@ if(LLVM_ENABLE_EXPENSIVE_CHECKS)
else()
add_compile_definitions(_GLIBCXX_ASSERTIONS)
endif()
+ # Enable debug hardening mode in libc++ for the host build.
+ if (LLVM_ENABLE_LIBCXX)
+ append("-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG"
+ CMAKE_CXX_FLAGS)
+ endif()
endif()
CHECK_CXX_SOURCE_COMPILES("
More information about the llvm-commits
mailing list