system_error (system_category): To system_category().
authorBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 18 Feb 2009 07:35:36 +0000 (07:35 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Wed, 18 Feb 2009 07:35:36 +0000 (07:35 +0000)
2009-02-17  Benjamin Kosnik  <bkoz@redhat.com>

* include/std/system_error (system_category): To system_category().
(generic_category): To generic_category. DR 890.
* src/system_error.cc: Define.
* include/bits/functexcept.h: Only one __throw_system_error.
* src/functexcept.cc: Same.
* include/std/mutex: Fixup for changes above.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Same.
* testsuite/19_diagnostics/error_code/cons/1.cc: Same.
* testsuite/19_diagnostics/system_error/cons-1.cc: Same.
* config/abi/pre/gnu.ver: Clean up exports.

From-SVN: r144259

12 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/include/bits/functexcept.h
libstdc++-v3/include/std/mutex
libstdc++-v3/include/std/system_error
libstdc++-v3/include/std/thread
libstdc++-v3/src/functexcept.cc
libstdc++-v3/src/system_error.cc
libstdc++-v3/src/thread.cc
libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc
libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc

index 96c79056dcdc91034a56e03d1572dc10d710b77e..1b04fe3504a5e49e614393e010931d0ad16e545a 100644 (file)
@@ -1,3 +1,21 @@
+2009-02-17  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * include/std/system_error (system_category): To system_category().
+       (generic_category): To generic_category. DR 890.
+       * src/system_error.cc: Define.
+       * include/bits/functexcept.h: Only one __throw_system_error.
+       * src/functexcept.cc: Same.
+       * include/std/mutex: Fixup for changes above.
+       * testsuite/19_diagnostics/error_condition/cons/1.cc: Same.
+       * testsuite/19_diagnostics/error_code/cons/1.cc: Same.
+       * testsuite/19_diagnostics/system_error/cons-1.cc: Same.
+       * config/abi/pre/gnu.ver: Clean up exports.
+
+2009-02-17  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+       * include/std/thread: Fix typo.
+       * src/thread.cc (thread::join): Use NULL.
+
 2009-02-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR libstdc++/39168
index f5e6d2fbca628fbfc923ee9f49cfe8bf6050d20c..1b8ebd4491367f99d799e3f457f176a5b33da1bd 100644 (file)
@@ -902,8 +902,8 @@ GLIBCXX_3.4.11 {
     _ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE;
 
     # system_error
-    _ZSt15system_category;
-    _ZSt16generic_category;
+    _ZSt15system_categoryv;
+    _ZSt16generic_categoryv;
 
     _ZNKSt10error_code23default_error_conditionEv;
     _ZNKSt14error_category23default_error_conditionEi;
@@ -923,7 +923,6 @@ GLIBCXX_3.4.11 {
 
     _ZNKSt4hashISt10error_codeEclES0_;
 
-    _ZSt20__throw_system_errorPKc;
     _ZSt20__throw_system_errori;
 
     # char16_t and char32_t
index 241384f0730e12d5062d0a9e8619cc3f062fd1e9..0b02eede180f3b0d5476269be374db7a8b2af7d2 100644 (file)
@@ -1,6 +1,6 @@
 // Function-Based Exception Support -*- C++ -*-
 
-// Copyright (C) 2001, 2004, 2005, 2008 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2004, 2005, 2008, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -86,16 +86,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   void
   __throw_underflow_error(const char*) __attribute__((__noreturn__));
 
+  // Helpers for exception objects in <ios>
   void
-  __throw_system_error(const char*) __attribute__((__noreturn__));
+  __throw_ios_failure(const char*) __attribute__((__noreturn__));
 
   void
   __throw_system_error(int) __attribute__((__noreturn__));
 
-  // Helpers for exception objects in basic_ios
-  void
-  __throw_ios_failure(const char*) __attribute__((__noreturn__));
-
 _GLIBCXX_END_NAMESPACE
 
 #endif
index 22aff881335265fdfc44a073172d06f95cbf9fcc..bdd5193f4d030c87451ef0ae2d4820c8aeb77297 100644 (file)
@@ -493,9 +493,9 @@ namespace std
       lock()
       {
        if (!_M_device)
-         __throw_system_error((int)errc::operation_not_permitted);
+         __throw_system_error(int(errc::operation_not_permitted));
        else if (_M_owns)
-         __throw_system_error((int)errc::resource_deadlock_would_occur);
+         __throw_system_error(int(errc::resource_deadlock_would_occur));
        else
          {
            _M_device->lock();
@@ -507,9 +507,9 @@ namespace std
       try_lock()
       {
        if (!_M_device)
-         __throw_system_error((int)errc::operation_not_permitted);
+         __throw_system_error(int(errc::operation_not_permitted));
        else if (_M_owns)
-         __throw_system_error((int)errc::resource_deadlock_would_occur);
+         __throw_system_error(int(errc::resource_deadlock_would_occur));
        else
          {
            _M_owns = _M_device->try_lock();
@@ -522,9 +522,9 @@ namespace std
        try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
        {
          if (!_M_device)
-           __throw_system_error((int)errc::operation_not_permitted);
+           __throw_system_error(int(errc::operation_not_permitted));
          else if (_M_owns)
-           __throw_system_error((int)errc::resource_deadlock_would_occur);
+           __throw_system_error(int(errc::resource_deadlock_would_occur));
          else
            {
              _M_owns = _M_device->try_lock_until(__atime);
@@ -537,9 +537,9 @@ namespace std
        try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
        {
          if (!_M_device)
-           __throw_system_error((int)errc::operation_not_permitted);
+           __throw_system_error(int(errc::operation_not_permitted));
          else if (_M_owns)
-           __throw_system_error((int)errc::resource_deadlock_would_occur);
+           __throw_system_error(int(errc::resource_deadlock_would_occur));
          else
            {
              _M_owns = _M_device->try_lock_for(__rtime);
@@ -551,7 +551,7 @@ namespace std
       unlock()
       {
        if (!_M_owns)
-         __throw_system_error((int)errc::operation_not_permitted);
+         __throw_system_error(int(errc::operation_not_permitted));
        else if (_M_device)
          {
            _M_device->unlock();
index 4a93e5fbbc7e8af731cb68deba0ded9e5988475a..486c3e697a9b02dc260ee10891d3337cdade4b02 100644 (file)
@@ -1,6 +1,6 @@
 // <system_error> -*- C++ -*-
 
-// Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -110,15 +110,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   };
 
   // DR 890.
-  extern const error_category& system_category;
-  extern const error_category& generic_category;
+  const error_category& system_category();
+  const error_category& generic_category();
 
   /// error_code
   // Implementation-specific error identification
   struct error_code
   {
     error_code()
-    : _M_value(0), _M_cat(&system_category) { }
+      : _M_value(0), _M_cat(&system_category()) { }
 
     error_code(int __v, const error_category& __cat)
     : _M_value(__v), _M_cat(&__cat) { }
@@ -126,7 +126,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     template<typename _ErrorCodeEnum>
       error_code(_ErrorCodeEnum __e,
       typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type* = 0)
-      : _M_value(static_cast<int>(__e)), _M_cat(&generic_category)
+      : _M_value(static_cast<int>(__e)), _M_cat(&generic_category())
       { }
 
     void 
@@ -138,7 +138,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
     void 
     clear()
-    { assign(0, system_category); }
+    { assign(0, system_category()); }
 
     // DR 804.
     template<typename _ErrorCodeEnum>
@@ -146,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
                         error_code&>::type
       operator=(_ErrorCodeEnum __e)
       {
-       assign(static_cast<int>(__e), generic_category);
+       assign(static_cast<int>(__e), generic_category());
        return *this;
       }
 
@@ -182,7 +182,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   // 19.4.2.6 non-member functions
   inline error_code
   make_error_code(errc __e)
-  { return error_code(static_cast<int>(__e), generic_category); }
+  { return error_code(static_cast<int>(__e), generic_category()); }
 
   inline bool
   operator<(const error_code& __lhs, const error_code& __rhs)
@@ -202,7 +202,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   // Portable error identification
   struct error_condition 
   {
-    error_condition() : _M_value(0), _M_cat(&generic_category) { }
+    error_condition() : _M_value(0), _M_cat(&generic_category()) { }
 
     error_condition(int __v, const error_category& __cat)     
     : _M_value(__v), _M_cat(&__cat) { }
@@ -211,7 +211,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       error_condition(_ErrorConditionEnum __e,
                      typename enable_if<is_error_condition_enum
                                      <_ErrorConditionEnum>::value>::type* = 0)
-      : _M_value(static_cast<int>(__e)), _M_cat(&generic_category) { }
+       : _M_value(static_cast<int>(__e)), _M_cat(&generic_category()) { }
 
     void
     assign(int __v, const error_category& __cat)
@@ -226,13 +226,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
                         <_ErrorConditionEnum>::value, error_condition&>::type
       operator=(_ErrorConditionEnum __e)
       {
-       assign(static_cast<int>(__e), generic_category);
+       assign(static_cast<int>(__e), generic_category());
        return *this;
       }
 
     void 
     clear()
-    { assign(0, generic_category); }
+    { assign(0, generic_category()); }
 
     // 19.4.3.4 observers
     int 
@@ -264,7 +264,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   // 19.4.3.6 non-member functions
   inline error_condition
   make_error_condition(errc __e)
-  { return error_condition(static_cast<int>(__e), generic_category); }
+  { return error_condition(static_cast<int>(__e), generic_category()); }
 
   inline bool 
   operator<(const error_condition& __lhs, const error_condition& __rhs)
index 8cd0e3a230f26be24bbd644ebfb09b9f85db6dba..8f00489262c7c9e0d1234ccc8650285a60d487eb 100644 (file)
@@ -89,7 +89,7 @@ namespace std
     };
 
     // Simple base type that the templatized, derived class containing
-    // an abitrary functor can be converted to and called.
+    // an arbitrary functor can be converted to and called.
     struct _Impl_base
     {
       __shared_base_type       _M_this_ptr;
index 266e035662a7e20fed56a6f83d3332f933eecd84..d1352d7941997bba29d626fc9a3b63002b45d607 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -97,16 +97,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   { throw underflow_error(_(__s)); }
 
   void
-  __throw_system_error(const char* __s)
-  { throw system_error(error_code(), _(__s)); }
+  __throw_ios_failure(const char* __s)
+  { throw ios_base::failure(_(__s)); }
 
   void
   __throw_system_error(int __i)
-  { throw system_error(error_code(__i, generic_category)); }
-
-  void
-  __throw_ios_failure(const char* __s)
-  { throw ios_base::failure(_(__s)); }
+  { throw system_error(error_code(__i, generic_category())); }
 #else
   void
   __throw_bad_exception(void)
@@ -161,16 +157,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   { std::abort(); }
 
   void
-  __throw_system_error(const char* __s)
+  __throw_ios_failure(const char*)
   { std::abort(); }
 
   void
   __throw_system_error(int __i)
   { std::abort(); }
-
-  void
-  __throw_ios_failure(const char*)
-  { std::abort(); }
 #endif //__EXCEPTIONS
 
 _GLIBCXX_END_NAMESPACE
index dd950eba150b244775f1c6181ed01d6484cc9366..84e288e916dc43ee3b83f40b4997df02d92d4273 100644 (file)
@@ -1,6 +1,6 @@
 // <system_error> implementation file
 
-// Copyright (C) 2007, 2008
+// Copyright (C) 2007, 2008, 2009
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -73,8 +73,11 @@ namespace
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
-  const error_category& system_category = system_category_instance;
-  const error_category& generic_category = generic_category_instance;
+  const error_category& 
+  system_category() { return system_category_instance; }
+
+  const error_category& 
+  generic_category() { return generic_category_instance; }
   
   system_error::~system_error() throw() { }
 
index ad399254fba149beb5b43f92d77f508967e3e2a3..f28544df91cc4d99f067bf2bd5f819564adad89d 100644 (file)
@@ -62,10 +62,7 @@ namespace std
     int __e = EINVAL;
 
     if (_M_id != id())
-    {
-      void* __r = 0;
-      __e = __gthread_join(_M_id._M_thread, &__r);
-    }
+      __e = __gthread_join(_M_id._M_thread, NULL);
 
     if (__e)
       __throw_system_error(__e);
index 742eb4099255ecfa110caabef5a63bae594a87f6..db5803a51cbca1512b58ed4d647c362ce37e0ab4 100644 (file)
@@ -1,7 +1,7 @@
 // { dg-options "-std=gnu++0x" }
 // 2007-08-22 Benjamin Kosnik  <bkoz@redhat.com>
 
-// Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ int main()
   // 1
   std::error_code e1;
   VERIFY( e1.value() == 0 );
-  VERIFY( e1.category() == std::system_category );
+  VERIFY( e1.category() == std::system_category() );
 
   // 2
   const __gnu_test::test_category cat;
@@ -40,7 +40,7 @@ int main()
   // 3
   std::error_code e3(std::errc::operation_not_supported);
   VERIFY( e3.value() == int(std::errc::operation_not_supported) );
-  VERIFY( e3.category() == std::generic_category );
+  VERIFY( e3.category() == std::generic_category() );
 
   return 0;
 }
index 5ea76f77a19763ff51c30a42ee3983838beeda49..bad78a2ab74d1601a2b75c994112f1005f261227 100644 (file)
@@ -1,6 +1,6 @@
 // { dg-options "-std=gnu++0x" }
 
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -28,7 +28,7 @@ void test01()
   // 1
   std::error_condition e1;
   VERIFY( e1.value() == 0 );
-  VERIFY( e1.category() == std::generic_category );
+  VERIFY( e1.category() == std::generic_category() );
 
   // 2
   const __gnu_test::test_category cat;
@@ -39,7 +39,7 @@ void test01()
   // 3
   std::error_condition e3(std::errc::operation_not_supported);
   VERIFY( e3.value() == int(std::errc::operation_not_supported) );
-  VERIFY( e3.category() == std::generic_category );
+  VERIFY( e3.category() == std::generic_category() );
 }
 
 int main()
index bf73398616be51dfb4da24750b97edd8359da3c4..571032159d395e659032b0de4179859e1ebe1730 100644 (file)
@@ -1,7 +1,7 @@
 // { dg-options "-std=gnu++0x" }
 // 2007-06-05 Benjamin Kosnik  <bkoz@redhat.com>
 
-// Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -38,8 +38,8 @@ int main()
 
   // 2
   {
-    std::system_error err2(95, std::system_category, s);
-    VERIFY( err2.code() == std::error_code(95, std::system_category) ); 
+    std::system_error err2(95, std::system_category(), s);
+    VERIFY( err2.code() == std::error_code(95, std::system_category()) ); 
     VERIFY( std::strcmp(err2.runtime_error::what(), s.c_str()) == 0 );
   }