[llvm-branch-commits] [libcxx] [libc++][string] Improve constexpr efficiency (PR #184724)

Vitaly Buka via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Mar 5 19:01:29 PST 2026


https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/184724

>From 8465c99883307ee890571901018225459d2233e9 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 4 Mar 2026 18:41:54 -0800
Subject: [PATCH 1/4] format

Created using spr 1.3.7
---
 libcxx/include/string | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/include/string b/libcxx/include/string
index 800fa68fd6963..27940be4384d1 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -1213,7 +1213,7 @@ public:
   // TODO(boomanaiden154): Once we mark this in destructors as dead on return,
   // we can use a normal call to __reset_internal_buffer and remove the extra
   // __rep constructor.
-  inline _LIBCPP_CONSTEXPR_SINCE_CXX20 ~basic_string() { 
+  inline _LIBCPP_CONSTEXPR_SINCE_CXX20 ~basic_string() {
     if (__libcpp_is_constant_evaluated())
       return;
     __reset_internal_buffer(__rep(__uninitialized_tag()));

>From 73b1c2beea7dd54d199eb3cb66309b4804872f78 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 4 Mar 2026 22:50:06 -0800
Subject: [PATCH 2/4] don't leak

Created using spr 1.3.7
---
 libcxx/include/string | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/libcxx/include/string b/libcxx/include/string
index c0edf33c4e3be..ad559fdf41366 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -1213,11 +1213,7 @@ public:
   // TODO(boomanaiden154): Once we mark this in destructors as dead on return,
   // we can use a normal call to __reset_internal_buffer and remove the extra
   // __rep constructor.
-  inline _LIBCPP_CONSTEXPR_SINCE_CXX20 ~basic_string() {
-    if (__libcpp_is_constant_evaluated())
-      return;
-    __reset_internal_buffer(__rep(__uninitialized_tag()));
-  }
+  inline _LIBCPP_CONSTEXPR_SINCE_CXX20 ~basic_string() { __reset_internal_buffer(__rep(__uninitialized_tag())); }
 
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 operator __self_view() const _NOEXCEPT {
     return __self_view(typename __self_view::__assume_valid(), data(), size());

>From 026b90fad215a7f73f11b12a0971b8c819a15eb7 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Thu, 5 Mar 2026 17:24:58 -0800
Subject: [PATCH 3/4] no dups

Created using spr 1.3.7
---
 libcxx/include/string | 2 --
 1 file changed, 2 deletions(-)

diff --git a/libcxx/include/string b/libcxx/include/string
index 26cbf118f6049..ad559fdf41366 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -2337,8 +2337,6 @@ private:
   }
 
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __annotate_new(size_type __current_size) const _NOEXCEPT {
-    if (__libcpp_is_constant_evaluated())
-      return;
     if (__libcpp_is_constant_evaluated())
       return;
     __annotate_contiguous_container(data() + capacity() + 1, data() + __current_size + 1);

>From 8acbd0cb58e543daf3fed2f571aa5638f8b4f0ff Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Thu, 5 Mar 2026 19:01:06 -0800
Subject: [PATCH 4/4] 5000

Created using spr 1.3.7
---
 .../string.cons/constexpr_initialization_stress.pass.cpp        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/libcxx/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp b/libcxx/test/libcxx/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
index f733db2130bab..48d5018baa739 100644
--- a/libcxx/test/libcxx/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
+++ b/libcxx/test/libcxx/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
@@ -19,7 +19,7 @@
 #include <cassert>
 
 consteval auto eval() {
-  std::array<std::string, 6000> r;
+  std::array<std::string, 5000> r;
   for (auto& s : r) {
     s = "hello";
   }



More information about the llvm-branch-commits mailing list