[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