[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 16:07:40 PDT 2025
https://github.com/Sterling-Augustine updated https://github.com/llvm/llvm-project/pull/165046
>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 1/2] 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()
>From 1219f8884d9b0667da4088e2718422e9ad173baa Mon Sep 17 00:00:00 2001
From: Sterling Augustine <saugustine at google.com>
Date: Fri, 24 Oct 2025 15:49:49 -0700
Subject: [PATCH 2/2] Also do this for
LIBC_CONF_MEMSET_X86_USE_SOFTWARE_PREFETCHING
---
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 c4e4a9e3465d7..7486a14bb4e18 100644
--- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
+++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake
@@ -85,6 +85,10 @@ function(_get_compile_options_from_config output_var)
list(APPEND 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()
+
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 fd1ae8d417f8c..35960c3706725 100644
--- a/libc/src/string/CMakeLists.txt
+++ b/libc/src/string/CMakeLists.txt
@@ -1,8 +1,5 @@
add_subdirectory(memory_utils)
-if(LIBC_CONF_MEMSET_X86_USE_SOFTWARE_PREFETCHING)
- list(APPEND string_config_options "-DLIBC_COPT_MEMSET_X86_USE_SOFTWARE_PREFETCHING")
-endif()
if(string_config_options)
list(PREPEND string_config_options "COMPILE_OPTIONS")
endif()
More information about the libc-commits
mailing list