[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
This commit is contained in:
Asiri Rathnayake 2016-10-06 11:15:41 +00:00
parent 47faf3be89
commit 08eb2148ff
21 changed files with 95 additions and 28 deletions

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
// <regex> // <regex>
// template <class BidirectionalIterator, class Allocator, class charT, class traits> // template <class BidirectionalIterator, class Allocator, class charT, class traits>
@ -25,6 +24,7 @@
extern "C" void LLVMFuzzerTestOneInput(const char *data) extern "C" void LLVMFuzzerTestOneInput(const char *data)
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
size_t size = strlen(data); size_t size = strlen(data);
if (size > 0) if (size > 0)
{ {
@ -37,6 +37,7 @@ extern "C" void LLVMFuzzerTestOneInput(const char *data)
} }
catch (std::regex_error &) {} catch (std::regex_error &) {}
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
// <regex> // <regex>
// template <class charT, class traits = regex_traits<charT>> class basic_regex; // template <class charT, class traits = regex_traits<charT>> class basic_regex;
@ -27,6 +26,7 @@ int main()
assert(r2.mark_count() == 2); assert(r2.mark_count() == 2);
assert(std::regex_search("ab", r2)); assert(std::regex_search("ab", r2));
#ifndef TEST_HAS_NO_EXCEPTIONS
bool caught = false; bool caught = false;
try { r2.assign("(def", std::regex::extended); } try { r2.assign("(def", std::regex::extended); }
catch(std::regex_error &) { caught = true; } catch(std::regex_error &) { caught = true; }
@ -34,4 +34,5 @@ int main()
assert(r2.flags() == std::regex::ECMAScript); assert(r2.flags() == std::regex::ECMAScript);
assert(r2.mark_count() == 2); assert(r2.mark_count() == 2);
assert(std::regex_search("ab", r2)); assert(std::regex_search("ab", r2));
#endif
} }

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-no-exceptions
// <regex> // <regex>
// template <class charT, class traits = regex_traits<charT>> class basic_regex; // template <class charT, class traits = regex_traits<charT>> class basic_regex;

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-no-exceptions
// <regex> // <regex>
// template <class charT, class traits = regex_traits<charT>> class basic_regex; // template <class charT, class traits = regex_traits<charT>> class basic_regex;

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -73,7 +72,7 @@ std::unique_ptr<int> f4(std::unique_ptr<int>&& p)
void f5(int j) void f5(int j)
{ {
std::this_thread::sleep_for(ms(200)); std::this_thread::sleep_for(ms(200));
throw j; TEST_THROW(j);
} }
template <class Ret, class CheckLamdba, class ...Args> template <class Ret, class CheckLamdba, class ...Args>
@ -140,6 +139,7 @@ int main()
test<Ret>(checkUPtr, DPID, f3, 3); test<Ret>(checkUPtr, DPID, f3, 3);
test<Ret>(checkUPtr, DPID, f4, std::unique_ptr<int>(new int(3))); test<Ret>(checkUPtr, DPID, f4, std::unique_ptr<int>(new int(3)));
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::future<void> f = std::async(f5, 3); std::future<void> f = std::async(f5, 3);
std::this_thread::sleep_for(ms(300)); std::this_thread::sleep_for(ms(300));
@ -150,4 +150,5 @@ int main()
std::this_thread::sleep_for(ms(300)); std::this_thread::sleep_for(ms(300));
try { f.get(); assert (false); } catch ( int ) {} try { f.get(); assert (false); } catch ( int ) {}
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
int main() int main()
{ {
{ {
@ -32,6 +33,7 @@ int main()
} }
assert(f.get() == 3); assert(f.get() == 3);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
typedef int T; typedef int T;
std::future<T> f; std::future<T> f;
@ -49,6 +51,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::broken_promise)); assert(e.code() == make_error_code(std::future_errc::broken_promise));
} }
} }
#endif
{ {
typedef int& T; typedef int& T;
@ -61,6 +64,7 @@ int main()
} }
assert(&f.get() == &i); assert(&f.get() == &i);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
typedef int& T; typedef int& T;
std::future<T> f; std::future<T> f;
@ -78,6 +82,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::broken_promise)); assert(e.code() == make_error_code(std::future_errc::broken_promise));
} }
} }
#endif
{ {
typedef void T; typedef void T;
@ -90,6 +95,7 @@ int main()
f.get(); f.get();
assert(true); assert(true);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
typedef void T; typedef void T;
std::future<T> f; std::future<T> f;
@ -115,4 +121,5 @@ int main()
e.code() == std::error_code(0, std::future_category())); e.code() == std::error_code(0, std::future_category()));
} }
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
int main() int main()
{ {
{ {
@ -28,6 +29,7 @@ int main()
p.set_value(105.5); p.set_value(105.5);
assert(f.get() == 105.5); assert(f.get() == 105.5);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<double> p; std::promise<double> p;
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();
@ -54,4 +56,5 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,7 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
#include "test_allocator.h" #include "test_allocator.h"
int main() int main()
@ -32,6 +32,7 @@ int main()
std::future<int> f = p.get_future(); std::future<int> f = p.get_future();
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
assert(f.valid()); assert(f.valid());
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
f = p0.get_future(); f = p0.get_future();
@ -42,6 +43,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
#endif
} }
assert(test_alloc_base::alloc_count == 0); assert(test_alloc_base::alloc_count == 0);
{ {
@ -51,6 +53,7 @@ int main()
std::future<int&> f = p.get_future(); std::future<int&> f = p.get_future();
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
assert(f.valid()); assert(f.valid());
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
f = p0.get_future(); f = p0.get_future();
@ -61,6 +64,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
#endif
} }
assert(test_alloc_base::alloc_count == 0); assert(test_alloc_base::alloc_count == 0);
{ {
@ -70,6 +74,7 @@ int main()
std::future<void> f = p.get_future(); std::future<void> f = p.get_future();
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
assert(f.valid()); assert(f.valid());
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
f = p0.get_future(); f = p0.get_future();
@ -80,6 +85,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
assert(test_alloc_base::alloc_count == 1); assert(test_alloc_base::alloc_count == 1);
#endif
} }
assert(test_alloc_base::alloc_count == 0); assert(test_alloc_base::alloc_count == 0);
} }

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
int main() int main()
{ {
{ {
@ -32,6 +33,7 @@ int main()
assert(j == 3); assert(j == 3);
++i; ++i;
assert(j == 4); assert(j == 4);
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
p.set_value(i); p.set_value(i);
@ -41,5 +43,6 @@ int main()
{ {
assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied));
} }
#endif
} }
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,10 +19,14 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
struct A struct A
{ {
A() {} A() {}
A(const A&) {throw 10;} A(const A&) {
TEST_THROW(10);
}
}; };
int main() int main()
@ -36,6 +39,7 @@ int main()
p.set_value(i); p.set_value(i);
++i; ++i;
assert(f.get() == 3); assert(f.get() == 3);
#ifndef TEST_HAS_NO_EXCEPTIONS
--i; --i;
try try
{ {
@ -46,12 +50,14 @@ int main()
{ {
assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied));
} }
#endif
} }
{ {
typedef A T; typedef A T;
T i; T i;
std::promise<T> p; std::promise<T> p;
std::future<T> f = p.get_future(); std::future<T> f = p.get_future();
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
p.set_value(i); p.set_value(i);
@ -61,5 +67,6 @@ int main()
{ {
assert(j == 10); assert(j == 10);
} }
#endif
} }
} }

View File

@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions // UNSUPPORTED: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -22,6 +21,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
void func1(std::promise<int> p) void func1(std::promise<int> p)
{ {
std::this_thread::sleep_for(std::chrono::milliseconds(500)); std::this_thread::sleep_for(std::chrono::milliseconds(500));
@ -73,6 +74,7 @@ int main()
assert(f.get() == 3); assert(f.get() == 3);
assert(f.valid()); assert(f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::shared_future<T> f = p.get_future(); std::shared_future<T> f = p.get_future();
@ -89,6 +91,7 @@ int main()
} }
assert(f.valid()); assert(f.valid());
} }
#endif
} }
{ {
typedef int& T; typedef int& T;
@ -100,6 +103,7 @@ int main()
assert(f.get() == 5); assert(f.get() == 5);
assert(f.valid()); assert(f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::shared_future<T> f = p.get_future(); std::shared_future<T> f = p.get_future();
@ -116,6 +120,7 @@ int main()
} }
assert(f.valid()); assert(f.valid());
} }
#endif
} }
{ {
typedef void T; typedef void T;
@ -127,6 +132,7 @@ int main()
f.get(); f.get();
assert(f.valid()); assert(f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::shared_future<T> f = p.get_future(); std::shared_future<T> f = p.get_future();
@ -143,5 +149,6 @@ int main()
} }
assert(f.valid()); assert(f.valid());
} }
#endif
} }
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
class A class A
{ {
long data_; long data_;
@ -41,6 +42,7 @@ void func2(std::packaged_task<double(int, char)> p)
int main() int main()
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::packaged_task<double(int, char)> p(A(5)); std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();
@ -55,6 +57,7 @@ int main()
assert(e.code() == make_error_code(std::future_errc::broken_promise)); assert(e.code() == make_error_code(std::future_errc::broken_promise));
} }
} }
#endif
{ {
std::packaged_task<double(int, char)> p(A(5)); std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
class A class A
{ {
long data_; long data_;
@ -38,6 +39,7 @@ int main()
p(3, 'a'); p(3, 'a');
assert(f.get() == 105.0); assert(f.get() == 105.0);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::packaged_task<double(int, char)> p(A(5)); std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();
@ -63,4 +65,5 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
class A class A
{ {
long data_; long data_;
@ -30,7 +31,7 @@ public:
long operator()(long i, long j) const long operator()(long i, long j) const
{ {
if (j == 'z') if (j == 'z')
throw A(6); TEST_THROW(A(6));
return data_ + i + j; return data_ + i + j;
} }
}; };
@ -49,6 +50,7 @@ void func1(std::packaged_task<double(int, char)> p)
void func2(std::packaged_task<double(int, char)> p) void func2(std::packaged_task<double(int, char)> p)
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
p.make_ready_at_thread_exit(3, 'a'); p.make_ready_at_thread_exit(3, 'a');
try try
{ {
@ -58,10 +60,12 @@ void func2(std::packaged_task<double(int, char)> p)
{ {
assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied));
} }
#endif
} }
void func3(std::packaged_task<double(int, char)> p) void func3(std::packaged_task<double(int, char)> p)
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
p.make_ready_at_thread_exit(3, 'a'); p.make_ready_at_thread_exit(3, 'a');
@ -70,6 +74,7 @@ void func3(std::packaged_task<double(int, char)> p)
{ {
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
#endif
} }
int main() int main()
@ -80,6 +85,7 @@ int main()
std::thread(func0, std::move(p)).detach(); std::thread(func0, std::move(p)).detach();
assert(f.get() == 105.0); assert(f.get() == 105.0);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::packaged_task<double(int, char)> p(A(5)); std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();
@ -105,4 +111,5 @@ int main()
std::thread t(func3, std::move(p)); std::thread t(func3, std::move(p));
t.join(); t.join();
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
class A class A
{ {
long data_; long data_;
@ -30,7 +31,7 @@ public:
long operator()(long i, long j) const long operator()(long i, long j) const
{ {
if (j == 'z') if (j == 'z')
throw A(6); TEST_THROW(A(6));
return data_ + i + j; return data_ + i + j;
} }
}; };
@ -49,6 +50,7 @@ void func1(std::packaged_task<double(int, char)> p)
void func2(std::packaged_task<double(int, char)> p) void func2(std::packaged_task<double(int, char)> p)
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
p(3, 'a'); p(3, 'a');
try try
{ {
@ -58,10 +60,12 @@ void func2(std::packaged_task<double(int, char)> p)
{ {
assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied));
} }
#endif
} }
void func3(std::packaged_task<double(int, char)> p) void func3(std::packaged_task<double(int, char)> p)
{ {
#ifndef TEST_HAS_NO_EXCEPTIONS
try try
{ {
p(3, 'a'); p(3, 'a');
@ -70,6 +74,7 @@ void func3(std::packaged_task<double(int, char)> p)
{ {
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
#endif
} }
int main() int main()
@ -80,6 +85,7 @@ int main()
std::thread(func0, std::move(p)).detach(); std::thread(func0, std::move(p)).detach();
assert(f.get() == 105.0); assert(f.get() == 105.0);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::packaged_task<double(int, char)> p(A(5)); std::packaged_task<double(int, char)> p(A(5));
std::future<double> f = p.get_future(); std::future<double> f = p.get_future();
@ -106,4 +112,5 @@ int main()
std::thread t(func3, std::move(p)); std::thread t(func3, std::move(p));
t.join(); t.join();
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -20,6 +19,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
class A class A
{ {
long data_; long data_;
@ -29,8 +30,6 @@ public:
long operator()(long i, long j) const long operator()(long i, long j) const
{ {
if (j == 'z')
throw A(6);
return data_ + i + j; return data_ + i + j;
} }
}; };
@ -47,6 +46,7 @@ int main()
f = p.get_future(); f = p.get_future();
assert(f.get() == 106.0); assert(f.get() == 106.0);
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::packaged_task<double(int, char)> p; std::packaged_task<double(int, char)> p;
try try
@ -59,4 +59,5 @@ int main()
assert(e.code() == make_error_code(std::future_errc::no_state)); assert(e.code() == make_error_code(std::future_errc::no_state));
} }
} }
#endif
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// UNSUPPORTED: c++98, c++03 // UNSUPPORTED: c++98, c++03
@ -22,6 +21,8 @@
#include <future> #include <future>
#include <cassert> #include <cassert>
#include "test_macros.h"
void func1(std::promise<int> p) void func1(std::promise<int> p)
{ {
std::this_thread::sleep_for(std::chrono::milliseconds(500)); std::this_thread::sleep_for(std::chrono::milliseconds(500));
@ -73,6 +74,7 @@ int main()
assert(f.get() == 3); assert(f.get() == 3);
assert(!f.valid()); assert(!f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::future<T> f = p.get_future(); std::future<T> f = p.get_future();
@ -89,6 +91,7 @@ int main()
} }
assert(!f.valid()); assert(!f.valid());
} }
#endif
} }
{ {
typedef int& T; typedef int& T;
@ -100,6 +103,7 @@ int main()
assert(f.get() == 5); assert(f.get() == 5);
assert(!f.valid()); assert(!f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::future<T> f = p.get_future(); std::future<T> f = p.get_future();
@ -116,6 +120,7 @@ int main()
} }
assert(!f.valid()); assert(!f.valid());
} }
#endif
} }
{ {
typedef void T; typedef void T;
@ -127,6 +132,7 @@ int main()
f.get(); f.get();
assert(!f.valid()); assert(!f.valid());
} }
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
std::promise<T> p; std::promise<T> p;
std::future<T> f = p.get_future(); std::future<T> f = p.get_future();
@ -143,5 +149,6 @@ int main()
} }
assert(!f.valid()); assert(!f.valid());
} }
#endif
} }
} }

View File

@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// XFAIL: libcpp-no-exceptions
// UNSUPPORTED: libcpp-has-no-threads // UNSUPPORTED: libcpp-has-no-threads
// <thread> // <thread>
@ -33,7 +32,7 @@ std::atomic<unsigned> outstanding_new(0);
void* operator new(std::size_t s) throw(std::bad_alloc) void* operator new(std::size_t s) throw(std::bad_alloc)
{ {
if (throw_one == 0) if (throw_one == 0)
throw std::bad_alloc(); TEST_THROW(std::bad_alloc());
--throw_one; --throw_one;
++outstanding_new; ++outstanding_new;
void* ret = std::malloc(s); void* ret = std::malloc(s);
@ -118,6 +117,7 @@ public:
// 3 Finally check that a thread runs successfully if we throw after 'N+1' // 3 Finally check that a thread runs successfully if we throw after 'N+1'
// allocations. // allocations.
void test_throwing_new_during_thread_creation() { void test_throwing_new_during_thread_creation() {
#ifndef TEST_HAS_NO_EXCEPTIONS
throw_one = 0xFFF; throw_one = 0xFFF;
{ {
std::thread t(f); std::thread t(f);
@ -142,6 +142,7 @@ void test_throwing_new_during_thread_creation() {
} }
f_run = false; f_run = false;
throw_one = 0xFFF; throw_one = 0xFFF;
#endif
} }
int main() int main()
@ -162,6 +163,7 @@ int main()
assert(G::op_run); assert(G::op_run);
} }
G::op_run = false; G::op_run = false;
#ifndef TEST_HAS_NO_EXCEPTIONS
{ {
try try
{ {
@ -178,6 +180,7 @@ int main()
assert(!G::op_run); assert(!G::op_run);
} }
} }
#endif
#if TEST_STD_VER >= 11 #if TEST_STD_VER >= 11
{ {
assert(G::n_alive == 0); assert(G::n_alive == 0);