[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 18:45:57 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