[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