[libc-commits] [libc] Move LIBC_CONF_STRING_UNSAFE_WIDE_READ to top-level libc-configuration (PR #165046)

via libc-commits libc-commits at lists.llvm.org
Fri Oct 24 14:53:50 PDT 2025


https://github.com/Sterling-Augustine created https://github.com/llvm/llvm-project/pull/165046

This options sets a compile option when building sources inside the string directory, and this option affects string_utils.h. But string_utils.h is #included from more places than just the string directory (such as from __support/CPP/string.h), leading to both narrow-reads in those cases, but more seriously, ODR violations when the two different string_length implementations are included int he same program.

Having this option at the top level avoids this problem.

>From 273f6c822ab2ef14967568b9009924eeb8a58600 Mon Sep 17 00:00:00 2001
From: Sterling Augustine <saugustine at google.com>
Date: Fri, 24 Oct 2025 14:46:51 -0700
Subject: [PATCH] Move LIBC_CONF_STRING_UNSAFE_WIDE_READ to top-level
 libc-configuration

This options sets a compile option when building sources inside the string
directory, and this option affects string_utils.h. But string_utils.h
is #included from more places than just the string directory (such as from
__support/CPP/string.h), leading to both narrow-reads in those cases, but
more seriously, ODR violations when the two different string_length
implementations are included int he same program.

Having this option at the top level avoids this problem.
---
 libc/cmake/modules/LLVMLibCCompileOptionRules.cmake | 4 ++++
 libc/src/string/CMakeLists.txt                      | 3 ---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
index 4c36ed8620f40..c4e4a9e3465d7 100644
--- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
+++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
@@ -81,6 +81,10 @@ function(_get_compile_options_from_config output_var)
     list(APPEND config_options "-DLIBC_QSORT_IMPL=${LIBC_CONF_QSORT_IMPL}")
   endif()
 
+  if(LIBC_CONF_STRING_UNSAFE_WIDE_READ)
+    list(APPEND config_options "-DLIBC_COPT_STRING_UNSAFE_WIDE_READ")
+  endif()
+
   if(LIBC_TYPES_TIME_T_IS_32_BIT AND LLVM_LIBC_FULL_BUILD)
     list(APPEND config_options "-DLIBC_TYPES_TIME_T_IS_32_BIT")
   endif()
diff --git a/libc/src/string/CMakeLists.txt b/libc/src/string/CMakeLists.txt
index 83c956429be24..fd1ae8d417f8c 100644
--- a/libc/src/string/CMakeLists.txt
+++ b/libc/src/string/CMakeLists.txt
@@ -1,8 +1,5 @@
 add_subdirectory(memory_utils)
 
-if(LIBC_CONF_STRING_UNSAFE_WIDE_READ)
-  list(APPEND string_config_options "-DLIBC_COPT_STRING_UNSAFE_WIDE_READ")
-endif()
 if(LIBC_CONF_MEMSET_X86_USE_SOFTWARE_PREFETCHING)
   list(APPEND string_config_options "-DLIBC_COPT_MEMSET_X86_USE_SOFTWARE_PREFETCHING")
 endif()



More information about the libc-commits mailing list