From 08eb2148ffe8b627c83a3a14ac24d1dd4e418690 Mon Sep 17 00:00:00 2001 From: Asiri Rathnayake Date: Thu, 6 Oct 2016 11:15:41 +0000 Subject: [PATCH] [libcxx] Recover no-exceptions XFAILs - I First batch of changes to get some of these XFAILs working in the no-exceptions libc++ variant. Changed some XFAILs to UNSUPPORTED where the test is all about exception handling. In other cases, used the test macros TEST_THROW and TEST_HAS_NO_EXCEPTIONS to conditionally exclude those parts of the test that concerns exception handling behaviour. Reviewers: EricWF, mclow.lists Differential revision: https://reviews.llvm.org/D24562 llvm-svn: 283441 --- libcxx/test/std/re/re.alg/re.alg.search/grep.pass.cpp | 3 ++- libcxx/test/std/re/re.regex/re.regex.assign/assign.pass.cpp | 3 ++- .../std/re/re.regex/re.regex.construct/bad_escape.pass.cpp | 2 +- .../std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp | 2 +- libcxx/test/std/thread/futures/futures.async/async.pass.cpp | 5 +++-- libcxx/test/std/thread/futures/futures.promise/dtor.pass.cpp | 9 ++++++++- .../std/thread/futures/futures.promise/get_future.pass.cpp | 5 ++++- .../std/thread/futures/futures.promise/move_ctor.pass.cpp | 8 +++++++- .../std/thread/futures/futures.promise/set_exception.pass.cpp | 2 +- .../futures.promise/set_exception_at_thread_exit.pass.cpp | 2 +- .../std/thread/futures/futures.promise/set_lvalue.pass.cpp | 5 ++++- .../thread/futures/futures.promise/set_value_const.pass.cpp | 11 +++++++++-- .../thread/futures/futures.promise/set_value_void.pass.cpp | 2 +- .../std/thread/futures/futures.shared_future/get.pass.cpp | 9 ++++++++- .../futures/futures.task/futures.task.members/dtor.pass.cpp | 5 ++++- .../futures.task/futures.task.members/get_future.pass.cpp | 5 ++++- .../futures.task.members/make_ready_at_thread_exit.pass.cpp | 11 +++++++++-- .../futures.task/futures.task.members/operator.pass.cpp | 11 +++++++++-- .../futures/futures.task/futures.task.members/reset.pass.cpp | 7 ++++--- .../std/thread/futures/futures.unique_future/get.pass.cpp | 9 ++++++++- .../thread.thread.class/thread.thread.constr/F.pass.cpp | 7 +++++-- 21 files changed, 95 insertions(+), 28 deletions(-) diff --git a/libcxx/test/std/re/re.alg/re.alg.search/grep.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/grep.pass.cpp index 136f995..d6fc769 100644 --- a/libcxx/test/std/re/re.alg/re.alg.search/grep.pass.cpp +++ b/libcxx/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 @@ extern "C" void LLVMFuzzerTestOneInput(const char *data) } catch (std::regex_error &) {} } +#endif } diff --git a/libcxx/test/std/re/re.regex/re.regex.assign/assign.pass.cpp b/libcxx/test/std/re/re.regex/re.regex.assign/assign.pass.cpp index 97208c6..12b23a9 100644 --- a/libcxx/test/std/re/re.regex/re.regex.assign/assign.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() assert(r2.flags() == std::regex::ECMAScript); assert(r2.mark_count() == 2); assert(std::regex_search("ab", r2)); +#endif } diff --git a/libcxx/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp b/libcxx/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp index 3c7e9f5..93b21ec 100644 --- a/libcxx/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp +++ b/libcxx/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; diff --git a/libcxx/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp b/libcxx/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp index 0692a59..0f30a8b 100644 --- a/libcxx/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp +++ b/libcxx/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; diff --git a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp index 5cb824d..5a5ff9df 100644 --- a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp +++ b/libcxx/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 @@ std::unique_ptr f4(std::unique_ptr&& p) void f5(int j) { std::this_thread::sleep_for(ms(200)); - throw j; + TEST_THROW(j); } template @@ -140,6 +139,7 @@ int main() 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 @@ int main() std::this_thread::sleep_for(ms(300)); try { f.get(); assert (false); } catch ( int ) {} } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.promise/dtor.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/dtor.pass.cpp index e3151ab..cd6d0ea 100644 --- a/libcxx/test/std/thread/futures/futures.promise/dtor.pass.cpp +++ b/libcxx/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 @@ int main() } assert(f.get() == 3); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef int T; std::future f; @@ -49,6 +51,7 @@ int main() assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { typedef int& T; @@ -61,6 +64,7 @@ int main() } assert(&f.get() == &i); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef int& T; std::future f; @@ -78,6 +82,7 @@ int main() assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { typedef void T; @@ -90,6 +95,7 @@ int main() f.get(); assert(true); } +#ifndef TEST_HAS_NO_EXCEPTIONS { typedef void T; std::future f; @@ -115,4 +121,5 @@ int main() e.code() == std::error_code(0, std::future_category())); } } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.promise/get_future.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/get_future.pass.cpp index bc45e28..fc606c6 100644 --- a/libcxx/test/std/thread/futures/futures.promise/get_future.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.promise/move_ctor.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/move_ctor.pass.cpp index 9a68b5c..c9971b0 100644 --- a/libcxx/test/std/thread/futures/futures.promise/move_ctor.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() 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 @@ int main() 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 @@ int main() 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 @@ int main() 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 @@ int main() 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); } diff --git a/libcxx/test/std/thread/futures/futures.promise/set_exception.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_exception.pass.cpp index 6ef41af..8788c63 100644 --- a/libcxx/test/std/thread/futures/futures.promise/set_exception.pass.cpp +++ b/libcxx/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 diff --git a/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp index f54d7cd..aad6370 100644 --- a/libcxx/test/std/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp +++ b/libcxx/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 diff --git a/libcxx/test/std/thread/futures/futures.promise/set_lvalue.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_lvalue.pass.cpp index 9839487..6e2a4a5 100644 --- a/libcxx/test/std/thread/futures/futures.promise/set_lvalue.pass.cpp +++ b/libcxx/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 @@ int main() assert(j == 3); ++i; assert(j == 4); +#ifndef TEST_HAS_NO_EXCEPTIONS try { p.set_value(i); @@ -41,5 +43,6 @@ int main() { assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); } +#endif } } diff --git a/libcxx/test/std/thread/futures/futures.promise/set_value_const.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_value_const.pass.cpp index db7465c..9c670c1 100644 --- a/libcxx/test/std/thread/futures/futures.promise/set_value_const.pass.cpp +++ b/libcxx/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 @@ int main() p.set_value(i); ++i; assert(f.get() == 3); +#ifndef TEST_HAS_NO_EXCEPTIONS --i; try { @@ -46,12 +50,14 @@ int main() { 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 @@ int main() { assert(j == 10); } +#endif } } diff --git a/libcxx/test/std/thread/futures/futures.promise/set_value_void.pass.cpp b/libcxx/test/std/thread/futures/futures.promise/set_value_void.pass.cpp index 87be8cd..30c6853 100644 --- a/libcxx/test/std/thread/futures/futures.promise/set_value_void.pass.cpp +++ b/libcxx/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 diff --git a/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp b/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp index 6eea1d8..23d3313 100644 --- a/libcxx/test/std/thread/futures/futures.shared_future/get.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() } assert(f.valid()); } +#endif } { typedef int& T; @@ -100,6 +103,7 @@ int main() 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 @@ int main() } assert(f.valid()); } +#endif } { typedef void T; @@ -127,6 +132,7 @@ int main() f.get(); assert(f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::shared_future f = p.get_future(); @@ -143,5 +149,6 @@ int main() } assert(f.valid()); } +#endif } } diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp index 7fafd10..708d849 100644 --- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/dtor.pass.cpp +++ b/libcxx/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 @@ void func2(std::packaged_task p) int main() { +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p(A(5)); std::future f = p.get_future(); @@ -55,6 +57,7 @@ int main() assert(e.code() == make_error_code(std::future_errc::broken_promise)); } } +#endif { std::packaged_task p(A(5)); std::future f = p.get_future(); diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp index c8e5d6e..8f51dcc 100644 --- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/get_future.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp index 54ac644..380f84c 100644 --- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp +++ b/libcxx/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 @@ public: 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 func1(std::packaged_task p) void func2(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS p.make_ready_at_thread_exit(3, 'a'); try { @@ -58,10 +60,12 @@ void func2(std::packaged_task p) { 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 @@ void func3(std::packaged_task p) { assert(e.code() == make_error_code(std::future_errc::no_state)); } +#endif } int main() @@ -80,6 +85,7 @@ int main() 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 @@ int main() std::thread t(func3, std::move(p)); t.join(); } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp index 9ad1509..b2d1ee0 100644 --- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/operator.pass.cpp +++ b/libcxx/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 @@ public: 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 func1(std::packaged_task p) void func2(std::packaged_task p) { +#ifndef TEST_HAS_NO_EXCEPTIONS p(3, 'a'); try { @@ -58,10 +60,12 @@ void func2(std::packaged_task p) { 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 @@ void func3(std::packaged_task p) { assert(e.code() == make_error_code(std::future_errc::no_state)); } +#endif } int main() @@ -80,6 +85,7 @@ int main() 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 @@ int main() std::thread t(func3, std::move(p)); t.join(); } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp b/libcxx/test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp index 02a5675..190afdc 100644 --- a/libcxx/test/std/thread/futures/futures.task/futures.task.members/reset.pass.cpp +++ b/libcxx/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 @@ public: long operator()(long i, long j) const { - if (j == 'z') - throw A(6); return data_ + i + j; } }; @@ -47,6 +46,7 @@ int main() f = p.get_future(); assert(f.get() == 106.0); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::packaged_task p; try @@ -59,4 +59,5 @@ int main() assert(e.code() == make_error_code(std::future_errc::no_state)); } } +#endif } diff --git a/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp b/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp index 67b1052..87a5425 100644 --- a/libcxx/test/std/thread/futures/futures.unique_future/get.pass.cpp +++ b/libcxx/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 @@ int main() 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 @@ int main() } assert(!f.valid()); } +#endif } { typedef int& T; @@ -100,6 +103,7 @@ int main() 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 @@ int main() } assert(!f.valid()); } +#endif } { typedef void T; @@ -127,6 +132,7 @@ int main() f.get(); assert(!f.valid()); } +#ifndef TEST_HAS_NO_EXCEPTIONS { std::promise p; std::future f = p.get_future(); @@ -143,5 +149,6 @@ int main() } assert(!f.valid()); } +#endif } } diff --git a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp b/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp index 5dd6a40..a965b70 100644 --- a/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp +++ b/libcxx/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 @@ std::atomic outstanding_new(0); 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 @@ public: // 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 @@ void test_throwing_new_during_thread_creation() { } f_run = false; throw_one = 0xFFF; +#endif } int main() @@ -162,6 +163,7 @@ int main() assert(G::op_run); } G::op_run = false; +#ifndef TEST_HAS_NO_EXCEPTIONS { try { @@ -178,6 +180,7 @@ int main() assert(!G::op_run); } } +#endif #if TEST_STD_VER >= 11 { assert(G::n_alive == 0); -- 2.7.4