+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
_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;
_ZNKSt4hashISt10error_codeEclES0_;
- _ZSt20__throw_system_errorPKc;
_ZSt20__throw_system_errori;
# char16_t and char32_t
// 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
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
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();
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();
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);
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);
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();
// <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
};
// 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) { }
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
void
clear()
- { assign(0, system_category); }
+ { assign(0, system_category()); }
// DR 804.
template<typename _ErrorCodeEnum>
error_code&>::type
operator=(_ErrorCodeEnum __e)
{
- assign(static_cast<int>(__e), generic_category);
+ assign(static_cast<int>(__e), generic_category());
return *this;
}
// 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)
// 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) { }
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)
<_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
// 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)
};
// 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;
-// 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
{ 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)
{ 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
// <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
_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() { }
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);
// { 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
// 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;
// 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;
}
// { 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
// 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;
// 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()
// { 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
// 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 );
}