[libcxx-commits] [libcxx] [libc++][string] Add constexpr initialization stress test (PR #184723)

Vitaly Buka via libcxx-commits libcxx-commits at lists.llvm.org
Wed Mar 4 22:55:30 PST 2026


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

>From d39613a6dd05f0f3dada761ce292465bc9778ec9 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 4 Mar 2026 18:37:26 -0800
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 .../constexpr_initialization_stress.pass.cpp  | 45 +++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp

diff --git a/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
new file mode 100644
index 0000000000000..beea50b0dd72a
--- /dev/null
+++ b/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
@@ -0,0 +1,45 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+// <string>
+
+// Stress test for constexpr std::string initialization.
+// This test ensures that we can handle a large number of strings in a constexpr context.
+
+// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=1000000
+// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-ops-limit): -fconstexpr-ops-limit=1000000
+
+#include <string>
+#include <array>
+#include <cassert>
+
+#include "test_macros.h"
+
+consteval auto eval() {
+  std::array<std::string, 1000> r;
+  for (auto& s : r) {
+    s = "hello";
+  }
+  return r;
+}
+
+bool test() {
+  static constexpr auto r = eval();
+  assert(r.front() == "hello");
+  assert(r.back() == "hello");
+
+  return true;
+}
+
+int main(int, char**) {
+  test();
+
+  return 0;
+}

>From 47c43591a2698ca0ce9604e715a0c0a249f4690d Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 4 Mar 2026 18:45:47 -0800
Subject: [PATCH 2/2] void

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

diff --git a/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
index 7d0dbacdf55cd..aba7b314e0ae2 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/constexpr_initialization_stress.pass.cpp
@@ -30,12 +30,10 @@ consteval auto eval() {
   return r;
 }
 
-bool test() {
+void test() {
   static constexpr auto r = eval();
   assert(r.front() == "hello");
   assert(r.back() == "hello");
-
-  return true;
 }
 
 int main(int, char**) {



More information about the libcxx-commits mailing list