Author: hhinnant Date: Wed Jul 13 11:00:50 2011 New Revision: 135045 URL: http://llvm.org/viewvc/llvm-project?rev=135045&view=rev Log: http://llvm.org/bugs/show_bug.cgi?id=10346
Modified: libcxx/trunk/include/future libcxx/trunk/src/future.cpp Modified: libcxx/trunk/include/future URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/future?rev=135045&r1=135044&r2=135045&view=diff ============================================================================== --- libcxx/trunk/include/future (original) +++ libcxx/trunk/include/future Wed Jul 13 11:00:50 2011 @@ -585,8 +585,10 @@ #endif { unique_lock<mutex> __lk(this->__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (this->__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif ::new(&__value_) _R(_VSTD::forward<_Arg>(__arg)); this->__state_ |= base::__constructed | base::ready; __lk.unlock(); @@ -603,8 +605,10 @@ #endif { unique_lock<mutex> __lk(this->__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (this->__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif ::new(&__value_) _R(_VSTD::forward<_Arg>(__arg)); this->__state_ |= base::__constructed; __thread_local_data()->__make_ready_at_thread_exit(this); @@ -663,8 +667,10 @@ __assoc_state<_R&>::set_value(_R& __arg) { unique_lock<mutex> __lk(this->__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (this->__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __value_ = &__arg; this->__state_ |= base::__constructed | base::ready; __lk.unlock(); @@ -676,8 +682,10 @@ __assoc_state<_R&>::set_value_at_thread_exit(_R& __arg) { unique_lock<mutex> __lk(this->__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (this->__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __value_ = &__arg; this->__state_ |= base::__constructed; __thread_local_data()->__make_ready_at_thread_exit(this); @@ -1066,8 +1074,10 @@ future<_R>::future(__assoc_state<_R>* __state) : __state_(__state) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_->__has_future_attached()) throw future_error(make_error_code(future_errc::future_already_retrieved)); +#endif __state_->__add_shared(); __state_->__set_future_attached(); } @@ -1168,8 +1178,10 @@ future<_R&>::future(__assoc_state<_R&>* __state) : __state_(__state) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_->__has_future_attached()) throw future_error(make_error_code(future_errc::future_already_retrieved)); +#endif __state_->__add_shared(); __state_->__set_future_attached(); } @@ -1368,8 +1380,10 @@ future<_R> promise<_R>::get_future() { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif return future<_R>(__state_); } @@ -1377,8 +1391,10 @@ void promise<_R>::set_value(const _R& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value(__r); } @@ -1388,8 +1404,10 @@ void promise<_R>::set_value(_R&& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value(_VSTD::move(__r)); } @@ -1399,8 +1417,10 @@ void promise<_R>::set_exception(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception(__p); } @@ -1408,8 +1428,10 @@ void promise<_R>::set_value_at_thread_exit(const _R& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value_at_thread_exit(__r); } @@ -1419,8 +1441,10 @@ void promise<_R>::set_value_at_thread_exit(_R&& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value_at_thread_exit(_VSTD::move(__r)); } @@ -1430,8 +1454,10 @@ void promise<_R>::set_exception_at_thread_exit(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception_at_thread_exit(__p); } @@ -1527,8 +1553,10 @@ future<_R&> promise<_R&>::get_future() { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif return future<_R&>(__state_); } @@ -1536,8 +1564,10 @@ void promise<_R&>::set_value(_R& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value(__r); } @@ -1545,8 +1575,10 @@ void promise<_R&>::set_exception(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception(__p); } @@ -1554,8 +1586,10 @@ void promise<_R&>::set_value_at_thread_exit(_R& __r) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value_at_thread_exit(__r); } @@ -1563,8 +1597,10 @@ void promise<_R&>::set_exception_at_thread_exit(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception_at_thread_exit(__p); } Modified: libcxx/trunk/src/future.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/future.cpp?rev=135045&r1=135044&r2=135045&view=diff ============================================================================== --- libcxx/trunk/src/future.cpp (original) +++ libcxx/trunk/src/future.cpp Wed Jul 13 11:00:50 2011 @@ -73,8 +73,10 @@ __assoc_sub_state::set_value() { unique_lock<mutex> __lk(__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __state_ |= __constructed | ready; __lk.unlock(); __cv_.notify_all(); @@ -84,8 +86,10 @@ __assoc_sub_state::set_value_at_thread_exit() { unique_lock<mutex> __lk(__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __state_ |= __constructed; __thread_local_data()->__make_ready_at_thread_exit(this); __lk.unlock(); @@ -95,8 +99,10 @@ __assoc_sub_state::set_exception(exception_ptr __p) { unique_lock<mutex> __lk(__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __exception_ = __p; __state_ |= ready; __lk.unlock(); @@ -107,8 +113,10 @@ __assoc_sub_state::set_exception_at_thread_exit(exception_ptr __p) { unique_lock<mutex> __lk(__mut_); +#ifndef _LIBCPP_NO_EXCEPTIONS if (__has_value()) throw future_error(make_error_code(future_errc::promise_already_satisfied)); +#endif __exception_ = __p; __thread_local_data()->__make_ready_at_thread_exit(this); __lk.unlock(); @@ -159,14 +167,18 @@ void __assoc_sub_state::__execute() { +#ifndef _LIBCPP_NO_EXCEPTIONS throw future_error(make_error_code(future_errc::no_state)); +#endif } future<void>::future(__assoc_sub_state* __state) : __state_(__state) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_->__has_future_attached()) throw future_error(make_error_code(future_errc::future_already_retrieved)); +#endif __state_->__add_shared(); __state_->__set_future_attached(); } @@ -206,40 +218,50 @@ future<void> promise<void>::get_future() { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif return future<void>(__state_); } void promise<void>::set_value() { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value(); } void promise<void>::set_exception(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception(__p); } void promise<void>::set_value_at_thread_exit() { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_value_at_thread_exit(); } void promise<void>::set_exception_at_thread_exit(exception_ptr __p) { +#ifndef _LIBCPP_NO_EXCEPTIONS if (__state_ == nullptr) throw future_error(make_error_code(future_errc::no_state)); +#endif __state_->set_exception_at_thread_exit(__p); } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits