[patch] libstdc++/56905 deprecate copy_exception

Jonathan Wakely jwakely.gcc@gmail.com
Wed Apr 24 22:00:00 GMT 2013


The C++0x draft defined std::copy_exception but it was renamed to
std::make_exception_ptr in the final C++11 standard.  This changes the
library to use the new name and deprecates the old one, so we can
remove it one day.

        PR libstdc++/56905
        * libsupc++/exception_ptr.h (copy_exception): Deprecate and
        move implementation to make_exception_ptr.
        * include/std/future (_State_base::_M_break_promise): Replace
        copy_exception with make_exception_ptr.
        * testsuite/18_support/exception_ptr/move.cc: Likewise.
        * testsuite/18_support/exception_ptr/rethrow_exception.cc: Likewise.
        * testsuite/30_threads/future/members/get2.cc: Likewise.
        * testsuite/30_threads/promise/members/set_exception.cc: Likewise.
        * testsuite/30_threads/promise/members/set_exception2.cc: Likewise.
        * testsuite/30_threads/promise/members/set_value2.cc: Likewise.
        * testsuite/30_threads/shared_future/members/get2.cc: Likewise.

Tested x86_64-linux, committed to trunk.
-------------- next part --------------
commit d6085858a53401f853913d9e58337e4a467a7460
Author: Jonathan Wakely <jwakely.gcc@gmail.com>
Date:   Wed Apr 24 22:40:11 2013 +0100

    	PR libstdc++/56905
    	* libsupc++/exception_ptr.h (copy_exception): Deprecate and
    	move implementation to make_exception_ptr.
    	* include/std/future (_State_base::_M_break_promise): Replace
    	copy_exception with make_exception_ptr.
    	* testsuite/18_support/exception_ptr/move.cc: Likewise.
    	* testsuite/18_support/exception_ptr/rethrow_exception.cc: Likewise.
    	* testsuite/30_threads/future/members/get2.cc: Likewise.
    	* testsuite/30_threads/promise/members/set_exception.cc: Likewise.
    	* testsuite/30_threads/promise/members/set_exception2.cc: Likewise.
    	* testsuite/30_threads/promise/members/set_value2.cc: Likewise.
    	* testsuite/30_threads/shared_future/members/get2.cc: Likewise.

diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index a86a7ca..6d6b32b 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -361,7 +361,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	if (static_cast<bool>(__res))
 	  {
 	    error_code __ec(make_error_code(future_errc::broken_promise));
-	    __res->_M_error = copy_exception(future_error(__ec));
+	    __res->_M_error = make_exception_ptr(future_error(__ec));
 	    {
 	      lock_guard<mutex> __lock(_M_mutex);
 	      _M_result.swap(__res);
diff --git a/libstdc++-v3/libsupc++/exception_ptr.h b/libstdc++-v3/libsupc++/exception_ptr.h
index bbf8f85..effab347 100644
--- a/libstdc++-v3/libsupc++/exception_ptr.h
+++ b/libstdc++-v3/libsupc++/exception_ptr.h
@@ -166,7 +166,7 @@ namespace std
   /// Obtain an exception_ptr pointing to a copy of the supplied object.
   template<typename _Ex>
     exception_ptr 
-    copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
+    make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
     {
       __try
 	{
@@ -183,10 +183,15 @@ namespace std
   // _GLIBCXX_RESOLVE_LIB_DEFECTS
   // 1130. copy_exception name misleading
   /// Obtain an exception_ptr pointing to a copy of the supplied object.
+  /// This function is deprecated, use std::make_exception_ptr instead.
   template<typename _Ex>
-    exception_ptr 
-    make_exception_ptr(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
-    { return std::copy_exception<_Ex>(__ex); }
+    exception_ptr
+    copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT _GLIBCXX_DEPRECATED;
+
+  template<typename _Ex>
+    exception_ptr
+    copy_exception(_Ex __ex) _GLIBCXX_USE_NOEXCEPT
+    { return std::make_exception_ptr<_Ex>(__ex); }
 
   // @} group exceptions
 } // namespace std
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc
index 2b7284d..9c3df1e 100644
--- a/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/move.cc
@@ -28,7 +28,7 @@ void test01()
 {
   bool test = true;
  
-  std::exception_ptr p1 = std::copy_exception(test);
+  std::exception_ptr p1 = std::make_exception_ptr(test);
   std::exception_ptr p2 = std::move(p1);
   VERIFY( p1 == 0 );
   VERIFY( !(p2 == 0) );
diff --git a/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc b/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc
index 430913c..39a57fe 100644
--- a/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc
+++ b/libstdc++-v3/testsuite/18_support/exception_ptr/rethrow_exception.cc
@@ -34,7 +34,7 @@ void test01()
   using namespace std;
 
   try {
-    rethrow_exception(copy_exception(0));
+    rethrow_exception(make_exception_ptr(0));
   } catch(...) {
   }
 }
@@ -45,7 +45,7 @@ void test02()
   using namespace std;
 
   try {
-    rethrow_exception(copy_exception(runtime_error("test")));
+    rethrow_exception(make_exception_ptr(runtime_error("test")));
   } catch(exception &e) {
     VERIFY( typeid(e) == typeid(runtime_error) );
     VERIFY( strcmp(e.what(), "test") == 0 );
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/get2.cc b/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
index b74c84d..2f05240 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/get2.cc
@@ -37,7 +37,7 @@ void test01()
   std::promise<int> p1;
   std::future<int> f1(p1.get_future());
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     (void) f1.get();
@@ -57,7 +57,7 @@ void test02()
   std::promise<int&> p1;
   std::future<int&> f1(p1.get_future());
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     (void) f1.get();
@@ -77,7 +77,7 @@ void test03()
   std::promise<void> p1;
   std::future<void> f1(p1.get_future());
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     f1.get();
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
index c7f1df2..920c116 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc
@@ -36,7 +36,7 @@ void test01()
 
   VERIFY( f1.valid() );
 
-  p1.set_exception(std::copy_exception(0));
+  p1.set_exception(std::make_exception_ptr(0));
 
   try
   {
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
index 527cfbb..84c26d6 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc
@@ -34,11 +34,11 @@ void test01()
   std::promise<int> p1;
   std::future<int> f1 = p1.get_future();
 
-  p1.set_exception(std::copy_exception(0));
+  p1.set_exception(std::make_exception_ptr(0));
 
   try
   {
-    p1.set_exception(std::copy_exception(1));
+    p1.set_exception(std::make_exception_ptr(1));
     VERIFY( false );
   }
   catch (std::future_error& e)
@@ -72,7 +72,7 @@ void test02()
 
   try
   {
-    p1.set_exception(std::copy_exception(0));
+    p1.set_exception(std::make_exception_ptr(0));
     VERIFY( false );
   }
   catch (std::future_error& e)
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
index fcba745..2ee5987 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc
@@ -65,7 +65,7 @@ void test02()
 
   try
   {
-    p1.set_exception(std::copy_exception(4));
+    p1.set_exception(std::make_exception_ptr(4));
     VERIFY( false );
   }
   catch (std::future_error& e)
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc b/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
index 1b8ccea..2fed6d5 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
@@ -38,7 +38,7 @@ void test01()
   std::shared_future<int> f1(p1.get_future());
   std::shared_future<int> f2(f1);
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     (void) f1.get();
@@ -67,7 +67,7 @@ void test02()
   std::shared_future<int&> f1(p1.get_future());
   std::shared_future<int&> f2(f1);
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     (void) f1.get();
@@ -96,7 +96,7 @@ void test03()
   std::shared_future<void> f1(p1.get_future());
   std::shared_future<void> f2(f1);
 
-  p1.set_exception(std::copy_exception(value));
+  p1.set_exception(std::make_exception_ptr(value));
   try
   {
     f1.get();


More information about the Libstdc++ mailing list