[libcxx-commits] [libcxx] 85e9b26 - [libc++] Prepare string tests for constexpr

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Sat Mar 19 10:48:21 PDT 2022


Author: Nikolas Klauser
Date: 2022-03-19T18:48:14+01:00
New Revision: 85e9b2687a13d1908aa86d1b89c5ce398a06cd39

URL: https://github.com/llvm/llvm-project/commit/85e9b2687a13d1908aa86d1b89c5ce398a06cd39
DIFF: https://github.com/llvm/llvm-project/commit/85e9b2687a13d1908aa86d1b89c5ce398a06cd39.diff

LOG: [libc++] Prepare string tests for constexpr

These are the lastâ„¢ changes to the tests for constexpr preparation.

Reviewed By: Quuxplusone, #libc, Mordante

Spies: Mordante, EricWF, libcxx-commits

Differential Revision: https://reviews.llvm.org/D120951

Added: 
    

Modified: 
    libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
    libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
    libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
    libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
    libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
index 16348afe3cfc1..fa05816571dd4 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/reserve_size.pass.cpp
@@ -23,7 +23,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(typename S::size_type min_cap, typename S::size_type erased_index, typename S::size_type res_arg)
 {
     S s(min_cap, 'a');
@@ -47,7 +47,7 @@ test(typename S::size_type min_cap, typename S::size_type erased_index, typename
 #endif
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
index dfed400b108f1..fa03112ca8b62 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size.pass.cpp
@@ -28,7 +28,7 @@ test(S s, typename S::size_type n, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
index f459842b36083..6cd3f1c1f6f7f 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/resize_size_char.pass.cpp
@@ -18,7 +18,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s, typename S::size_type n, typename S::value_type c, S expected)
 {
     if (n <= s.max_size())
@@ -28,7 +28,7 @@ test(S s, typename S::size_type n, typename S::value_type c, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
index 03c7cfdf76ae9..fa1e3dbdcfeb4 100644
--- a/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.capacity/shrink_to_fit.pass.cpp
@@ -17,7 +17,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s)
 {
     typename S::size_type old_cap = s.capacity();
@@ -30,7 +30,7 @@ test(S s)
 }
 
 bool test() {
-    {
+  {
     typedef std::string S;
     S s;
     test(s);
@@ -42,9 +42,9 @@ bool test() {
     s.assign(100, 'a');
     s.erase(50);
     test(s);
-    }
+  }
 #if TEST_STD_VER >= 11
-    {
+  {
     typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
     S s;
     test(s);
@@ -56,7 +56,7 @@ bool test() {
     s.assign(100, 'a');
     s.erase(50);
     test(s);
-    }
+  }
 #endif
 
   return true;

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
index f98a6f530b31f..b3153a6427d16 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/T_size_size.pass.cpp
@@ -43,7 +43,7 @@ test(SV sv, std::size_t pos, std::size_t n)
         assert(s2.capacity() >= s2.size());
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -76,7 +76,7 @@ test(SV sv, std::size_t pos, std::size_t n, const typename S::allocator_type& a)
         assert(s2.capacity() >= s2.size());
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
index cf5d26637c285..8b3b42189e264 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/char_assignment.pass.cpp
@@ -17,7 +17,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s1, typename S::value_type s2)
 {
     typedef typename S::traits_type T;

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
index 552b43844771d..a7a79c9beb221 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/copy.pass.cpp
@@ -18,7 +18,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s1)
 {
     S s2 = s1;

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
index c3f0b1aee333f..fc12c4d27d0ae 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/copy_alloc.pass.cpp
@@ -21,7 +21,7 @@
 struct alloc_imp {
     bool active;
 
-    alloc_imp() : active(true) {}
+    TEST_CONSTEXPR alloc_imp() : active(true) {}
 
     template <class T>
     T* allocate(std::size_t n)
@@ -45,10 +45,10 @@ struct poca_alloc {
 
     alloc_imp *imp;
 
-    poca_alloc(alloc_imp *imp_) : imp (imp_) {}
+    TEST_CONSTEXPR poca_alloc(alloc_imp *imp_) : imp (imp_) {}
 
     template <class U>
-    poca_alloc(const poca_alloc<U>& other) : imp(other.imp) {}
+    TEST_CONSTEXPR poca_alloc(const poca_alloc<U>& other) : imp(other.imp) {}
 
     T*   allocate  (std::size_t n)       { return imp->allocate<T>(n);}
     void deallocate(T* p, std::size_t n) { imp->deallocate(p, n); }
@@ -67,7 +67,7 @@ bool operator!=(const poca_alloc<T>& lhs, const poca_alloc<U>& rhs)
 }
 
 template <class S>
-void test_assign(S &s1, const S& s2)
+TEST_CONSTEXPR_CXX20 void test_assign(S &s1, const S& s2)
 {
     try { s1 = s2; }
     catch ( std::bad_alloc &) { return; }
@@ -78,7 +78,7 @@ void test_assign(S &s1, const S& s2)
 
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s1, const typename S::allocator_type& a)
 {
     S s2(s1, a);
@@ -106,7 +106,7 @@ bool test() {
   }
 
 #ifndef TEST_HAS_NO_EXCEPTIONS
-  {
+  if (!TEST_IS_CONSTANT_EVALUATED) {
     typedef poca_alloc<char> A;
     typedef std::basic_string<char, std::char_traits<char>, A> S;
     const char * p1 = "This is my first string";

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
index 70585b167caf6..d730f674f89f8 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/string_view.pass.cpp
@@ -21,7 +21,7 @@
 #include "min_allocator.h"
 
 template <class charT>
-void
+TEST_CONSTEXPR_CXX20 void
 test(std::basic_string_view<charT> sv)
 {
     typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
@@ -47,7 +47,7 @@ test(std::basic_string_view<charT> sv)
 }
 
 template <class charT, class A>
-void
+TEST_CONSTEXPR_CXX20 void
 test(std::basic_string_view<charT> sv, const A& a)
 {
     typedef std::basic_string<charT, std::char_traits<charT>, A> S;

diff  --git a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
index 5cd6ff2ba1324..24787938b0ed7 100644
--- a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp
@@ -45,7 +45,7 @@ test(S str, unsigned pos)
         assert(s2.capacity() >= s2.size());
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -77,7 +77,7 @@ test(S str, unsigned pos, unsigned n)
         assert(s2.capacity() >= s2.size());
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -109,7 +109,7 @@ test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a)
         assert(s2.capacity() >= s2.size());
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -124,11 +124,10 @@ test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a)
 #endif
 }
 
-#if TEST_STD_VER >= 11
-#ifndef TEST_HAS_NO_EXCEPTIONS
-void test2583()
-{   // LWG #2583
-    typedef std::basic_string<char, std::char_traits<char>, test_allocator<char> > StringA;
+void test_lwg2583()
+{
+#if TEST_STD_VER >= 11 && !defined(TEST_HAS_NO_EXCEPTIONS)
+    typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> StringA;
     std::vector<StringA, std::scoped_allocator_adaptor<test_allocator<StringA>>> vs;
     StringA s{"1234"};
     vs.emplace_back(s, 2);
@@ -136,9 +135,8 @@ void test2583()
     try { vs.emplace_back(s, 5); }
     catch (const std::out_of_range&) { return; }
     assert(false);
-}
-#endif
 #endif
+}
 
 bool test() {
   {
@@ -218,10 +216,6 @@ bool test() {
     test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 10, A());
     test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 100, A());
   }
-
-#ifndef TEST_HAS_NO_EXCEPTIONS
-  test2583();
-#endif
 #endif
 
   return true;
@@ -233,6 +227,7 @@ int main(int, char**)
 #if TEST_STD_VER > 17
   // static_assert(test());
 #endif
+  test_lwg2583();
 
   return 0;
 }

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
index c5188cf65b2ec..f190d602523c7 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.char.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-void test()
+bool test()
 {
     using S = std::string;
 
@@ -31,6 +31,8 @@ void test()
     assert( s2.contains('c'));
     assert( s2.contains('e'));
     assert(!s2.contains('x'));
+
+    return true;
 }
 
 int main(int, char**)

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
index 152e0702c00f7..0ff1043dad4c8 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.ptr.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-void test()
+bool test()
 {
     using S = std::string;
 
@@ -61,6 +61,8 @@ void test()
     assert(!sNot.contains("abcde"));
     assert( sNot.contains("xyz"));
     assert(!sNot.contains("zyx"));
+
+    return true;
 }
 
 int main(int, char**)

diff  --git a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
index 648c67359d42c..bafee71ef39c9 100644
--- a/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.contains/contains.string_view.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-void test()
+bool test()
 {
     using S = std::string;
     using SV = std::string_view;
@@ -82,6 +82,8 @@ void test()
     assert( sNot.contains(svNot));
     assert(!sNot.contains(svNot2));
     assert(!sNot.contains(svNot3));
+
+    return true;
 }
 
 int main(int, char**)

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
index b59546f3b4ab0..2607c099255c0 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/cend.pass.cpp
@@ -17,7 +17,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(const S& s)
 {
     typename S::const_iterator ce = s.cend();

diff  --git a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
index f2f1cde6f896a..02cc5e5d15afb 100644
--- a/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.iterators/rend.pass.cpp
@@ -19,7 +19,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s)
 {
     const S& cs = s;

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
index aeb8d18807cad..9c85badcffcd0 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/robust_against_adl.pass.cpp
@@ -19,8 +19,8 @@ template<class T> struct Holder { T t; };
 template<class T>
 struct Charlike {
     char ch_;
-    Charlike(char ch) : ch_(ch) {}
-    operator char() const { return ch_; }
+    TEST_CONSTEXPR Charlike(char ch) : ch_(ch) {}
+    TEST_CONSTEXPR operator char() const { return ch_; }
 };
 
 bool test() {

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
index 028c1b881b8cf..29467c956a24b 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/T_size_size.pass.cpp
@@ -30,7 +30,7 @@ test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -56,7 +56,7 @@ test_npos(S s, SV sv, typename S::size_type pos, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
index fd96af4c550eb..07d84a7d5c2c5 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/iterator.pass.cpp
@@ -172,7 +172,7 @@ bool test() {
   }
 #endif
 #ifndef TEST_HAS_NO_EXCEPTIONS
-  { // test iterator operations that throw
+  if (!TEST_IS_CONSTANT_EVALUATED) { // test iterator operations that throw
     typedef std::string S;
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;
@@ -219,17 +219,20 @@ bool test() {
     std::string s_short = "hello";
     std::string s_long = "Lorem ipsum dolor sit amet, consectetur/";
     std::string s_othertype = "hello";
-    const unsigned char *first = reinterpret_cast<const unsigned char*>(s_othertype.data());
     std::string s_sneaky = "hello";
 
     test(s_short, s_short.data() + s_short.size(), s_short.data() + s_short.size() + 1,
          std::string("hello\0", 6));
     test(s_long, s_long.data() + s_long.size(), s_long.data() + s_long.size() + 1,
          std::string("Lorem ipsum dolor sit amet, consectetur/\0", 41));
-    test(s_othertype, first + 2, first + 5, std::string("hellollo"));
 
     s_sneaky.reserve(12);
     test(s_sneaky, s_sneaky.data(), s_sneaky.data() + 6, std::string("hellohello\0", 11));
+
+     if (!TEST_IS_CONSTANT_EVALUATED) {
+       const unsigned char *first = reinterpret_cast<const unsigned char*>(s_othertype.data());
+       test(s_othertype, first + 2, first + 5, std::string("hellollo"));
+     }
   }
 
   { // test with a move iterator that returns char&&

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
index 14b5c86e9edbb..5881ef1e04c47 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer.pass.cpp
@@ -18,7 +18,7 @@
 #include "min_allocator.h"
 
 template <class S>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s, const typename S::value_type* str, S expected)
 {
     s.append(str);

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
index a6ed128ee7ec8..6c046fc8d859c 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/string_size_size.pass.cpp
@@ -30,7 +30,7 @@ test(S s, S str, typename S::size_type pos, typename S::size_type n, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -56,7 +56,7 @@ test_npos(S s, S str, typename S::size_type pos, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
index 94050c2a6cdcb..7b810f5200a89 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/T_size_size.pass.cpp
@@ -19,7 +19,7 @@
 #include "min_allocator.h"
 
 template <class S, class SV>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
 {
     if (pos <= sv.size())
@@ -29,7 +29,7 @@ test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {
@@ -45,7 +45,7 @@ test(S s, SV sv, typename S::size_type pos, typename S::size_type n, S expected)
 }
 
 template <class S, class SV>
-void
+TEST_CONSTEXPR_CXX20 void
 test_npos(S s, SV sv, typename S::size_type pos, S expected)
 {
     if (pos <= sv.size())
@@ -55,7 +55,7 @@ test_npos(S s, SV sv, typename S::size_type pos, S expected)
         assert(s == expected);
     }
 #ifndef TEST_HAS_NO_EXCEPTIONS
-    else
+    else if (!TEST_IS_CONSTANT_EVALUATED)
     {
         try
         {

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
index 1e80b09981a0e..2646aff77306d 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_assign/iterator.pass.cpp
@@ -19,7 +19,7 @@
 #include "min_allocator.h"
 
 template <class S, class It>
-void
+TEST_CONSTEXPR_CXX20 void
 test(S s, It first, It last, S expected)
 {
     s.assign(first, last);
@@ -172,7 +172,7 @@ bool test() {
   }
 #endif
 #ifndef TEST_HAS_NO_EXCEPTIONS
-  { // test iterator operations that throw
+  if (!TEST_IS_CONSTANT_EVALUATED) { // test iterator operations that throw
     typedef std::string S;
     typedef ThrowingIterator<char> TIter;
     typedef cpp17_input_iterator<TIter> IIter;


        


More information about the libcxx-commits mailing list