diff options
author | Jan Hubicka <jh@suse.cz> | 2009-04-27 11:20:40 +0000 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2009-04-27 11:20:40 +0000 |
commit | 71abb2cebbbfb2152bee85f0693691dea08dcd46 (patch) | |
tree | 146b35efa22684b642013a957d46d40c94dad3c6 /libstdc++-v3 | |
parent | a0ccfc7d9eca34349f172035382259688bb173c2 (diff) |
Merge from mainline.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/pretty-ipa@146832 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
17 files changed, 335 insertions, 38 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 74797ada3f8..8841a7060c9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,13 +1,43 @@ +2009-04-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/39880 + PR libstdc++/39881 + PR libstdc++/39882 + * include/std/system_error (is_error_code_enum<errc>): Remove. + (error_condition<>::error_condition(_ErrorCodeEnum,) + error_condition<>::operator=(_ErrorCodeEnum)): Use make_error_condition. + (error_code<>::error_code(_ErrorCodeEnum,), + error_code<>::operator=(_ErrorCodeEnum)): Use make_error_code. + * testsuite/19_diagnostics/system_error/39880.cc: New. + * testsuite/19_diagnostics/error_condition/modifiers/39881.cc: + Likewise. + * testsuite/19_diagnostics/error_condition/cons/39881.cc: Likewise. + * testsuite/19_diagnostics/error_code/modifiers/39882.cc: Likewise. + * testsuite/19_diagnostics/error_code/cons/39882.cc: Likewise. + * testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc: + Adjust. + * testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc: + Likewise. + * testsuite/19_diagnostics/error_code/cons/1.cc: Likewise. + * testsuite/19_diagnostics/error_code/operators/bool.cc: Likewise. + * testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise. + * testsuite/19_diagnostics/error_code/operators/not_equal.cc: + Likewise. + * testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Likewise. + * testsuite/19_diagnostics/system_error/cons-1.cc: Likewise. + * testsuite/19_diagnostics/system_error/what-4.cc: Likewise. + * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. + 2009-04-24 Benjamin Kosnik <bkoz@redhat.com> - * xml/authors.xml: Add space. - * xml/faq.xml: Update links. - * xml/manual/intro.xml: Same. - * xml/manual/abi.xml: Update. - * xml/manual/appendix_contributing.xml: Fix typo. - * xml/manual/status_cxxtr1.xml: Update links. - * xml/manual/status_cxx1998.xml: Same. - * xml/manual/status_cxx200x.xml: Same. + * doc/xml/authors.xml: Add space. + * doc/xml/faq.xml: Update links. + * doc/xml/manual/intro.xml: Same. + * doc/xml/manual/abi.xml: Update. + * doc/xml/manual/appendix_contributing.xml: Fix typo. + * doc/xml/manual/status_cxxtr1.xml: Update links. + * doc/xml/manual/status_cxx1998.xml: Same. + * doc/xml/manual/status_cxx200x.xml: Same. 2009-04-22 Jan Hubicka <jh@suse.cz> diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error index 3d0cff21d69..b9902a137c1 100644 --- a/libstdc++-v3/include/std/system_error +++ b/libstdc++-v3/include/std/system_error @@ -51,10 +51,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template<typename _Tp> struct is_error_code_enum : public false_type { }; - template<> - struct is_error_code_enum<errc> - : public true_type { }; - /// is_error_condition_enum template<typename _Tp> struct is_error_condition_enum : public false_type { }; @@ -108,12 +104,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _GLIBCXX_CONST const error_category& system_category() throw (); _GLIBCXX_CONST const error_category& generic_category() throw (); + error_code make_error_code(errc); + /// 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) { } @@ -121,8 +119,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()) - { } + { *this = make_error_code(__e); } void assign(int __v, const error_category& __cat) @@ -140,10 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value, error_code&>::type operator=(_ErrorCodeEnum __e) - { - assign(static_cast<int>(__e), generic_category()); - return *this; - } + { return *this = make_error_code(__e); } int value() const { return _M_value; } @@ -192,12 +186,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) { return (__os << __e.category().name() << ':' << __e.value()); } + error_condition make_error_condition(errc); /// error_condition // 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) { } @@ -206,7 +202,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()) { } + { *this = make_error_condition(__e); } void assign(int __v, const error_category& __cat) @@ -220,10 +216,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) typename enable_if<is_error_condition_enum <_ErrorConditionEnum>::value, error_condition&>::type operator=(_ErrorConditionEnum __e) - { - assign(static_cast<int>(__e), generic_category()); - return *this; - } + { return *this = make_error_condition(__e); } void clear() diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc index a790a950b2b..a874814f42d 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc @@ -32,7 +32,7 @@ int main() return 0; } -// { dg-error "deleted function" "" { target *-*-* } 76 } +// { dg-error "deleted function" "" { target *-*-* } 72 } // { dg-error "used here" "" { target *-*-* } 31 } // { dg-error "first required here" "" { target *-*-* } 30 } // { dg-excess-errors "copy constructor" } 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 b6da3866e2c..7cd280aae39 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/1.cc @@ -37,7 +37,7 @@ int main() VERIFY( e2.category() == cat ); // 3 - std::error_code e3(std::errc::operation_not_supported); + std::error_code e3(std::make_error_code(std::errc::operation_not_supported)); VERIFY( e3.value() == int(std::errc::operation_not_supported) ); VERIFY( e3.category() == std::generic_category() ); diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc new file mode 100644 index 00000000000..9d5c2e3338e --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/cons/39882.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <system_error> +#include <testsuite_hooks.h> + +enum my_errc { my_err = 0 }; + +class my_error_category_impl +: public std::error_category +{ +public: + const char* name() const { return ""; } + std::string message(int) const { return ""; } +} my_error_category_instance; + +std::error_code +make_error_code(my_errc e) +{ + return std::error_code(static_cast<int>(e), + my_error_category_instance); +} + +namespace std +{ + template<> + struct is_error_code_enum<my_errc> + : public true_type {}; +} + +// libstdc++/39882 +void test01() +{ + bool test __attribute__((unused)) = true; + + std::error_code ec1(my_err); + VERIFY( ec1 == make_error_code(my_err) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc new file mode 100644 index 00000000000..880a93655e9 --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/modifiers/39882.cc @@ -0,0 +1,61 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <system_error> +#include <testsuite_hooks.h> + +enum my_errc { my_err = 0 }; + +class my_error_category_impl +: public std::error_category +{ +public: + const char* name() const { return ""; } + std::string message(int) const { return ""; } +} my_error_category_instance; + +std::error_code +make_error_code(my_errc e) +{ + return std::error_code(static_cast<int>(e), + my_error_category_instance); +} + +namespace std +{ + template<> + struct is_error_code_enum<my_errc> + : public true_type {}; +} + +// libstdc++/39882 +void test01() +{ + bool test __attribute__((unused)) = true; + + std::error_code ec2; + ec2 = my_err; + VERIFY( ec2 == make_error_code(my_err) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc index 93af740896a..51536032728 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/bool.cc @@ -34,7 +34,7 @@ int main() } // 2 - std::error_code e2(std::errc::operation_not_supported); + std::error_code e2(std::make_error_code(std::errc::operation_not_supported)); if (e2) { VERIFY( true ); diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc index 462b184cb3c..880434c7502 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/equal.cc @@ -27,7 +27,7 @@ int main() bool test __attribute__((unused)) = true; std::error_code e1; - std::error_code e2(std::errc::operation_not_supported); + std::error_code e2(std::make_error_code(std::errc::operation_not_supported)); VERIFY( e1 == e1 ); VERIFY( !(e1 == e2) ); diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc index 8de4fe1e2dc..bda2ee30e52 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/error_code/operators/not_equal.cc @@ -27,7 +27,7 @@ int main() bool test __attribute__((unused)) = true; std::error_code e1; - std::error_code e2(std::errc::operation_not_supported); + std::error_code e2(std::make_error_code(std::errc::operation_not_supported)); VERIFY( !(e1 != e1) ); VERIFY( e1 != e2 ); diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc new file mode 100644 index 00000000000..7931f174063 --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/cons/39881.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <system_error> +#include <testsuite_hooks.h> + +enum my_errc { my_err = 0 }; + +class my_error_category_impl +: public std::error_category +{ +public: + const char* name() const { return ""; } + std::string message(int) const { return ""; } +} my_error_category_instance; + +std::error_condition +make_error_condition(my_errc e) +{ + return std::error_condition(static_cast<int>(e), + my_error_category_instance); +} + +namespace std +{ + template<> + struct is_error_condition_enum<my_errc> + : public true_type { }; +} + +// libstdc++/39881 +void test01() +{ + bool test __attribute__((unused)) = true; + + std::error_condition ec1(my_err); + VERIFY( ec1 == make_error_condition(my_err) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc b/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc new file mode 100644 index 00000000000..0178a91c418 --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/error_condition/modifiers/39881.cc @@ -0,0 +1,61 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <system_error> +#include <testsuite_hooks.h> + +enum my_errc { my_err = 0 }; + +class my_error_category_impl +: public std::error_category +{ +public: + const char* name() const { return ""; } + std::string message(int) const { return ""; } +} my_error_category_instance; + +std::error_condition +make_error_condition(my_errc e) +{ + return std::error_condition(static_cast<int>(e), + my_error_category_instance); +} + +namespace std +{ + template<> + struct is_error_condition_enum<my_errc> + : public true_type { }; +} + +// libstdc++/39881 +void test01() +{ + bool test __attribute__((unused)) = true; + + std::error_condition ec2; + ec2 = my_err; + VERIFY( ec2 == make_error_condition(my_err) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc new file mode 100644 index 00000000000..a6ac7470c05 --- /dev/null +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc @@ -0,0 +1,29 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <system_error> + +// libstdc++/39880 +void test01() +{ + std::error_code ec; + if (ec == std::errc::not_supported) + { } +} 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 11176d765a9..42f29798570 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc @@ -26,7 +26,8 @@ int main() { bool test __attribute__((unused)) = true; const std::string s("too late: boulangerie out of pain au raisin"); - const std::error_code e(std::errc::operation_not_supported); + const std::error_code + e(std::make_error_code(std::errc::operation_not_supported)); // 1 { diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc index adf8e73d3b5..2b5d51c4571 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc @@ -31,7 +31,8 @@ void test01() bool test __attribute__((unused)) = true; std::string s("after nine thirty, this request cannot be met"); - std::system_error obj = std::system_error(std::errc::invalid_argument, s); + std::system_error obj = + std::system_error(std::make_error_code(std::errc::invalid_argument), s); std::string s1(obj.what()); std::string s2(obj.what()); VERIFY( s1 == s2 ); diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc index c4a0288766a..d2533745323 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc @@ -32,7 +32,7 @@ void test() char buf[64]; error_code e1; - error_code e2(errc::bad_address); + error_code e2(make_error_code(errc::bad_address)); string s, s1, s2; { diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc index b9a015ad4c2..6d7e9d1a6a2 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++0x" } -// Copyright (C) 2007, 2009 Free Software Foundation +// Copyright (C) 2007, 2008, 2009 Free Software Foundation // // 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 @@ -32,7 +32,7 @@ void test() wchar_t buf[64]; error_code e1; - error_code e2(errc::bad_address); + error_code e2(make_error_code(errc::bad_address)); wstring s, s1, s2; { diff --git a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc index c1becb8e248..28d1955a679 100644 --- a/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc +++ b/libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc @@ -44,7 +44,8 @@ void test01() } catch (const std::system_error& ex) { - VERIFY( ex.code() == std::error_code(std::errc::operation_not_permitted) ); + VERIFY( ex.code() == std::make_error_code + (std::errc::operation_not_permitted) ); } catch (...) { @@ -80,8 +81,8 @@ void test02() } catch (const std::system_error& ex) { - VERIFY( ex.code() == std::error_code( - std::errc::resource_deadlock_would_occur) ); + VERIFY( ex.code() == std::make_error_code + (std::errc::resource_deadlock_would_occur) ); } catch (...) { |