diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 96c79056dcd..1b04fe3504a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,21 @@ +2009-02-17 Benjamin Kosnik + + * 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 + + * include/std/thread: Fix typo. + * src/thread.cc (thread::join): Use NULL. + 2009-02-15 Paolo Carlini PR libstdc++/39168 diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index f5e6d2fbca6..1b8ebd44913 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -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 diff --git a/libstdc++-v3/include/bits/functexcept.h b/libstdc++-v3/include/bits/functexcept.h index 241384f0730..0b02eede180 100644 --- a/libstdc++-v3/include/bits/functexcept.h +++ b/libstdc++-v3/include/bits/functexcept.h @@ -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 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 diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex index 22aff881335..bdd5193f4d0 100644 --- a/libstdc++-v3/include/std/mutex +++ b/libstdc++-v3/include/std/mutex @@ -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(); diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error index 4a93e5fbbc7..486c3e697a9 100644 --- a/libstdc++-v3/include/std/system_error +++ b/libstdc++-v3/include/std/system_error @@ -1,6 +1,6 @@ // -*- 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 error_code(_ErrorCodeEnum __e, typename enable_if::value>::type* = 0) - : _M_value(static_cast(__e)), _M_cat(&generic_category) + : _M_value(static_cast(__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 @@ -146,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) error_code&>::type operator=(_ErrorCodeEnum __e) { - assign(static_cast(__e), generic_category); + assign(static_cast(__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(__e), generic_category); } + { return error_code(static_cast(__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::value>::type* = 0) - : _M_value(static_cast(__e)), _M_cat(&generic_category) { } + : _M_value(static_cast(__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(__e), generic_category); + assign(static_cast(__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(__e), generic_category); } + { return error_condition(static_cast(__e), generic_category()); } inline bool operator<(const error_condition& __lhs, const error_condition& __rhs) diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index 8cd0e3a230f..8f00489262c 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -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; diff --git a/libstdc++-v3/src/functexcept.cc b/libstdc++-v3/src/functexcept.cc index 266e035662a..d1352d79419 100644 --- a/libstdc++-v3/src/functexcept.cc +++ b/libstdc++-v3/src/functexcept.cc @@ -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 diff --git a/libstdc++-v3/src/system_error.cc b/libstdc++-v3/src/system_error.cc index dd950eba150..84e288e916d 100644 --- a/libstdc++-v3/src/system_error.cc +++ b/libstdc++-v3/src/system_error.cc @@ -1,6 +1,6 @@ // 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() { } diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc index ad399254fba..f28544df91c 100644 --- a/libstdc++-v3/src/thread.cc +++ b/libstdc++-v3/src/thread.cc @@ -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); diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc index 742eb409925..db5803a51cb 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++0x" } // 2007-08-22 Benjamin Kosnik -// 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; } diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc index 5ea76f77a19..bad78a2ab74 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/1.cc @@ -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() diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc index bf73398616b..571032159d3 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++0x" } // 2007-06-05 Benjamin Kosnik -// 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 ); }