Index: test/std/re/re.alg/re.alg.search/grep.pass.cpp =================================================================== --- test/std/re/re.alg/re.alg.search/grep.pass.cpp +++ test/std/re/re.alg/re.alg.search/grep.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions // // template @@ -25,6 +24,7 @@ extern "C" void LLVMFuzzerTestOneInput(const char *data) { +#ifndef TEST_HAS_NO_EXCEPTIONS size_t size = strlen(data); if (size > 0) { @@ -37,6 +37,7 @@ } catch (std::regex_error &) {} } +#endif } Index: test/std/re/re.regex/re.regex.assign/assign.pass.cpp =================================================================== --- test/std/re/re.regex/re.regex.assign/assign.pass.cpp +++ test/std/re/re.regex/re.regex.assign/assign.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions // // template > class basic_regex; @@ -27,6 +26,7 @@ assert(r2.mark_count() == 2); assert(std::regex_search("ab", r2)); +#ifndef TEST_HAS_NO_EXCEPTIONS bool caught = false; try { r2.assign("(def", std::regex::extended); } catch(std::regex_error &) { caught = true; } @@ -34,4 +34,5 @@ assert(r2.flags() == std::regex::ECMAScript); assert(r2.mark_count() == 2); assert(std::regex_search("ab", r2)); +#endif } Index: test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp =================================================================== --- test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp +++ test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions +// UNSUPPORTED: libcpp-no-exceptions // // template > class basic_regex; Index: test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp =================================================================== --- test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp +++ test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -// XFAIL: libcpp-no-exceptions +// UNSUPPORTED: libcpp-no-exceptions // // template > class basic_regex; Index: test/std/thread/futures/futures.async/async.pass.cpp =================================================================== --- test/std/thread/futures/futures.async/async.pass.cpp +++ test/std/thread/futures/futures.async/async.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -73,7 +72,7 @@ void f5(int j) { std::this_thread::sleep_for(ms(200)); - throw j; + TEST_THROW(j); } template @@ -140,6 +139,7 @@ test(checkUPtr, DPID, f3, 3); test(checkUPtr, DPID, f4, std::unique_ptr(new int(3))); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::future f = std::async(f5, 3); std::this_thread::sleep_for(ms(300)); @@ -150,4 +150,5 @@ std::this_thread::sleep_for(ms(300)); try { f.get(); assert (false); } catch ( int ) {} } +#endif } Index: test/std/thread/futures/futures.promise/dtor.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/dtor.pass.cpp +++ test/std/thread/futures/futures.promise/dtor.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + int main() { { @@ -32,6 +33,7 @@ } assert(f.get() == 3); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef int T; std::future f; @@ -49,6 +51,7 @@ assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { typedef int& T; @@ -61,6 +64,7 @@ } assert(&f.get() == &i); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef int& T; std::future f; @@ -78,6 +82,7 @@ assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { typedef void T; @@ -90,6 +95,7 @@ f.get(); assert(true); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef void T; std::future f; @@ -115,4 +121,5 @@ e.code() == std::error_code(0, std::future_category())); } } +#endif } Index: test/std/thread/futures/futures.promise/get_future.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/get_future.pass.cpp +++ test/std/thread/futures/futures.promise/get_future.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + int main() { { @@ -28,6 +29,7 @@ p.set_value(105.5); assert(f.get() == 105.5); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::future f = p.get_future(); @@ -54,4 +56,5 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } Index: test/std/thread/futures/futures.promise/move_ctor.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/move_ctor.pass.cpp +++ test/std/thread/futures/futures.promise/move_ctor.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,7 @@ #include #include +#include "test_macros.h" #include "test_allocator.h" int main() @@ -32,6 +32,7 @@ std::future f = p.get_future(); assert(test_alloc_base::alloc_count == 1); assert(f.valid()); +#ifndef TEST_HAS_NO_EXCEPTIONS try { f = p0.get_future(); @@ -42,6 +43,7 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } assert(test_alloc_base::alloc_count == 1); +#endif } assert(test_alloc_base::alloc_count == 0); { @@ -51,6 +53,7 @@ std::future f = p.get_future(); assert(test_alloc_base::alloc_count == 1); assert(f.valid()); +#ifndef TEST_HAS_NO_EXCEPTIONS try { f = p0.get_future(); @@ -61,6 +64,7 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } assert(test_alloc_base::alloc_count == 1); +#endif } assert(test_alloc_base::alloc_count == 0); { @@ -70,6 +74,7 @@ std::future f = p.get_future(); assert(test_alloc_base::alloc_count == 1); assert(f.valid()); +#ifndef TEST_HAS_NO_EXCEPTIONS try { f = p0.get_future(); @@ -80,6 +85,7 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } assert(test_alloc_base::alloc_count == 1); +#endif } assert(test_alloc_base::alloc_count == 0); } Index: test/std/thread/futures/futures.promise/set_exception.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/set_exception.pass.cpp +++ test/std/thread/futures/futures.promise/set_exception.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions +// UNSUPPORTED: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 Index: test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp +++ test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions +// UNSUPPORTED: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 Index: test/std/thread/futures/futures.promise/set_lvalue.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/set_lvalue.pass.cpp +++ test/std/thread/futures/futures.promise/set_lvalue.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + int main() { { @@ -32,6 +33,7 @@ assert(j == 3); ++i; assert(j == 4); +#ifndef TEST_HAS_NO_EXCEPTIONS try { p.set_value(i); @@ -41,5 +43,6 @@ { assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); } +#endif } } Index: test/std/thread/futures/futures.promise/set_value_const.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/set_value_const.pass.cpp +++ test/std/thread/futures/futures.promise/set_value_const.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,10 +19,14 @@ #include #include +#include "test_macros.h" + struct A { A() {} - A(const A&) {throw 10;} + A(const A&) { + TEST_THROW(10); + } }; int main() @@ -36,6 +39,7 @@ p.set_value(i); ++i; assert(f.get() == 3); +#ifndef TEST_HAS_NO_EXCEPTIONS --i; try { @@ -46,12 +50,14 @@ { assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); } +#endif } { typedef A T; T i; std::promise p; std::future f = p.get_future(); +#ifndef TEST_HAS_NO_EXCEPTIONS try { p.set_value(i); @@ -61,5 +67,6 @@ { assert(j == 10); } +#endif } } Index: test/std/thread/futures/futures.promise/set_value_void.pass.cpp =================================================================== --- test/std/thread/futures/futures.promise/set_value_void.pass.cpp +++ test/std/thread/futures/futures.promise/set_value_void.pass.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions +// UNSUPPORTED: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 Index: test/std/thread/futures/futures.shared_future/get.pass.cpp =================================================================== --- test/std/thread/futures/futures.shared_future/get.pass.cpp +++ test/std/thread/futures/futures.shared_future/get.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -22,6 +21,8 @@ #include #include +#include "test_macros.h" + void func1(std::promise p) { std::this_thread::sleep_for(std::chrono::milliseconds(500)); @@ -73,6 +74,7 @@ assert(f.get() == 3); assert(f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::shared_future f = p.get_future(); @@ -89,6 +91,7 @@ } assert(f.valid()); } +#endif } { typedef int& T; @@ -100,6 +103,7 @@ assert(f.get() == 5); assert(f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::shared_future f = p.get_future(); @@ -116,6 +120,7 @@ } assert(f.valid()); } +#endif } { typedef void T; @@ -127,6 +132,7 @@ f.get(); assert(f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::shared_future f = p.get_future(); @@ -143,5 +149,6 @@ } assert(f.valid()); } +#endif } } Index: test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp =================================================================== --- test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp +++ test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + class A { long data_; @@ -41,6 +42,7 @@ int main() { +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p(A(5)); std::future f = p.get_future(); @@ -55,6 +57,7 @@ assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { std::packaged_task p(A(5)); std::future f = p.get_future(); Index: test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp =================================================================== --- test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp +++ test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + class A { long data_; @@ -38,6 +39,7 @@ p(3, 'a'); assert(f.get() == 105.0); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p(A(5)); std::future f = p.get_future(); @@ -63,4 +65,5 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } Index: test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp =================================================================== --- test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp +++ test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + class A { long data_; @@ -30,7 +31,7 @@ long operator()(long i, long j) const { if (j == 'z') - throw A(6); + TEST_THROW(A(6)); return data_ + i + j; } }; @@ -49,6 +50,7 @@ void func2(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS p.make_ready_at_thread_exit(3, 'a'); try { @@ -58,10 +60,12 @@ { assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); } +#endif } void func3(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS try { p.make_ready_at_thread_exit(3, 'a'); @@ -70,6 +74,7 @@ { assert(e.code() == make_error_code(std::future_errc::no_state)); } +#endif } int main() @@ -80,6 +85,7 @@ std::thread(func0, std::move(p)).detach(); assert(f.get() == 105.0); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p(A(5)); std::future f = p.get_future(); @@ -105,4 +111,5 @@ std::thread t(func3, std::move(p)); t.join(); } +#endif } Index: test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp =================================================================== --- test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp +++ test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + class A { long data_; @@ -30,7 +31,7 @@ long operator()(long i, long j) const { if (j == 'z') - throw A(6); + TEST_THROW(A(6)); return data_ + i + j; } }; @@ -49,6 +50,7 @@ void func2(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS p(3, 'a'); try { @@ -58,10 +60,12 @@ { assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); } +#endif } void func3(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS try { p(3, 'a'); @@ -70,6 +74,7 @@ { assert(e.code() == make_error_code(std::future_errc::no_state)); } +#endif } int main() @@ -80,6 +85,7 @@ std::thread(func0, std::move(p)).detach(); assert(f.get() == 105.0); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p(A(5)); std::future f = p.get_future(); @@ -106,4 +112,5 @@ std::thread t(func3, std::move(p)); t.join(); } +#endif } Index: test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp =================================================================== --- test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp +++ test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -20,6 +19,8 @@ #include #include +#include "test_macros.h" + class A { long data_; @@ -29,8 +30,6 @@ long operator()(long i, long j) const { - if (j == 'z') - throw A(6); return data_ + i + j; } }; @@ -47,6 +46,7 @@ f = p.get_future(); assert(f.get() == 106.0); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p; try @@ -59,4 +59,5 @@ assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } Index: test/std/thread/futures/futures.unique_future/get.pass.cpp =================================================================== --- test/std/thread/futures/futures.unique_future/get.pass.cpp +++ test/std/thread/futures/futures.unique_future/get.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: c++98, c++03 @@ -22,6 +21,8 @@ #include #include +#include "test_macros.h" + void func1(std::promise p) { std::this_thread::sleep_for(std::chrono::milliseconds(500)); @@ -73,6 +74,7 @@ assert(f.get() == 3); assert(!f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::future f = p.get_future(); @@ -89,6 +91,7 @@ } assert(!f.valid()); } +#endif } { typedef int& T; @@ -100,6 +103,7 @@ assert(f.get() == 5); assert(!f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::future f = p.get_future(); @@ -116,6 +120,7 @@ } assert(!f.valid()); } +#endif } { typedef void T; @@ -127,6 +132,7 @@ f.get(); assert(!f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::future f = p.get_future(); @@ -143,5 +149,6 @@ } assert(!f.valid()); } +#endif } } Index: test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp =================================================================== --- test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp +++ test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-has-no-threads // @@ -33,7 +32,7 @@ void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_one == 0) - throw std::bad_alloc(); + TEST_THROW(std::bad_alloc()); --throw_one; ++outstanding_new; void* ret = std::malloc(s); @@ -118,6 +117,7 @@ // 3 Finally check that a thread runs successfully if we throw after 'N+1' // allocations. void test_throwing_new_during_thread_creation() { +#ifndef TEST_HAS_NO_EXCEPTIONS throw_one = 0xFFF; { std::thread t(f); @@ -142,6 +142,7 @@ } f_run = false; throw_one = 0xFFF; +#endif } int main() @@ -162,6 +163,7 @@ assert(G::op_run); } G::op_run = false; +#ifndef TEST_HAS_NO_EXCEPTIONS { try { @@ -178,6 +180,7 @@ assert(!G::op_run); } } +#endif #if TEST_STD_VER >= 11 { assert(G::n_alive == 0);