[libcxx-commits] [libcxx] [libc++] Remove string external instantiations that just call _Traits::length (PR #160673)
via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 1 07:21:17 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: Nikolas Klauser (philnik777)
<details>
<summary>Changes</summary>
There are quite a few functions instantiated externally that simply call `traits_type::length` and then forward to another function. These functions should be inlined pretty much always, since these functions are likely to be called with string literals where the compiler can simply fold away the call to `traits_type::length`.
---
Full diff: https://github.com/llvm/llvm-project/pull/160673.diff
2 Files Affected:
- (modified) libcxx/include/__string/extern_template_lists.h (-7)
- (modified) libcxx/src/string.cpp (+9-1)
``````````diff
diff --git a/libcxx/include/__string/extern_template_lists.h b/libcxx/include/__string/extern_template_lists.h
index 18f0ff9f11bd5..805ee4b7e5fdc 100644
--- a/libcxx/include/__string/extern_template_lists.h
+++ b/libcxx/include/__string/extern_template_lists.h
@@ -37,16 +37,13 @@
Func(basic_string<CharT>& basic_string<CharT>::assign(size_type, value_type)) \
Func(basic_string<CharT>& basic_string<CharT>::assign(const basic_string&, size_type, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::append(size_type, value_type)) \
- Func(basic_string<CharT>& basic_string<CharT>::append(const value_type*)) \
Func(basic_string<CharT>& basic_string<CharT>::append(const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::append(const basic_string&, size_type, size_type)) \
Func(void basic_string<CharT>::push_back(value_type)) \
- Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*)) \
Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, size_type, value_type)) \
Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const basic_string&, size_type, size_type)) \
Func(basic_string<CharT>::iterator basic_string<CharT>::insert(basic_string::const_iterator, value_type)) \
- Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const value_type*)) \
Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, size_type, value_type)) \
Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const basic_string&, size_type, size_type)) \
@@ -64,8 +61,6 @@
Func(basic_string<CharT>::size_type basic_string<CharT>::find_last_not_of(const value_type*, size_type, size_type) const) \
Func(CharT& basic_string<CharT>::at(size_type)) \
Func(const CharT& basic_string<CharT>::at(size_type) const) \
- Func(int basic_string<CharT>::compare(const value_type*) const) \
- Func(int basic_string<CharT>::compare(size_type, size_type, const value_type*) const) \
Func(int basic_string<CharT>::compare(size_type, size_type, const value_type*, size_type) const) \
Func(int basic_string<CharT>::compare(size_type, size_type, const basic_string&, size_type, size_type) const) \
Func(const basic_string<CharT>::size_type basic_string<CharT>::npos) \
@@ -74,7 +69,6 @@
_LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \
Func(basic_string<CharT>::basic_string(const basic_string&)) \
Func(basic_string<CharT>::basic_string(const basic_string&, const allocator<CharT>&)) \
- Func(basic_string<CharT>& basic_string<CharT>::assign(const value_type*)) \
Func(basic_string<CharT>& basic_string<CharT>::assign(const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::operator=(basic_string const&)) \
Func(void basic_string<CharT>::__grow_by(size_type, size_type, size_type, size_type, size_type, size_type)) \
@@ -84,7 +78,6 @@
_LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \
Func(void basic_string<CharT>::__init_copy_ctor_external(const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::__assign_external(const value_type*, size_type)) \
- Func(basic_string<CharT>& basic_string<CharT>::__assign_external(const value_type*)) \
Func(basic_string<CharT>& basic_string<CharT>::__assign_no_alias<false>(const value_type*, size_type)) \
Func(basic_string<CharT>& basic_string<CharT>::__assign_no_alias<true>(const value_type*, size_type)) \
Func(void basic_string<CharT>::__erase_external_with_move(size_type, size_type))
diff --git a/libcxx/src/string.cpp b/libcxx/src/string.cpp
index 5028fc88fe46d..31096013ba4d8 100644
--- a/libcxx/src/string.cpp
+++ b/libcxx/src/string.cpp
@@ -54,7 +54,15 @@ void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, si
}
# define STRING_LEGACY_API(CharT) \
- template _LIBCPP_EXPORTED_FROM_ABI void basic_string<CharT>::__init(const value_type*, size_type, size_type)
+ template _LIBCPP_EXPORTED_FROM_ABI void basic_string<CharT>::__init(const value_type*, size_type, size_type); \
+ template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::append(const value_type*); \
+ template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*); \
+ template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::replace( \
+ size_type, size_type, const value_type*); \
+ template _LIBCPP_EXPORTED_FROM_ABI int basic_string<CharT>::compare(const value_type*) const; \
+ template _LIBCPP_EXPORTED_FROM_ABI int basic_string<CharT>::compare(size_type, size_type, const value_type*) \
+ const; \
+ template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::assign(const value_type*)
STRING_LEGACY_API(char);
# if _LIBCPP_HAS_WIDE_CHARACTERS
``````````
</details>
https://github.com/llvm/llvm-project/pull/160673
More information about the libcxx-commits
mailing list