From b5fbd147fe61d53f46dbf60fc1103ec01409c8b4 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 16 Sep 2010 14:55:37 +0000 Subject: [PATCH] system_error (system_error::system_error(error_code), [...]): Fix for what() to return the NBTS recommended in the Note in 19.5.6.2/14. 2010-09-16 Paolo Carlini * include/std/system_error (system_error::system_error(error_code), system_error(error_code, const string&), system_error(int, const error_category&), system_error(int, const error_category&, const string&)): Fix for what() to return the NBTS recommended in the Note in 19.5.6.2/14. * testsuite/19_diagnostics/system_error/cons-1.cc: Adjust. * testsuite/19_diagnostics/system_error/what-1.cc: Likewise. * testsuite/19_diagnostics/system_error/what-2.cc: Likewise. * testsuite/19_diagnostics/system_error/what-big.cc: Likewise. * testsuite/19_diagnostics/system_error/what-3.cc: Likewise. * testsuite/19_diagnostics/system_error/what-4.cc: Tidy includes. From-SVN: r164339 --- libstdc++-v3/ChangeLog | 15 +++++++++++++++ libstdc++-v3/include/std/system_error | 17 ++++++++++------- .../19_diagnostics/system_error/cons-1.cc | 8 ++++---- .../19_diagnostics/system_error/what-1.cc | 9 ++++----- .../19_diagnostics/system_error/what-2.cc | 5 ++--- .../19_diagnostics/system_error/what-3.cc | 5 ++--- .../19_diagnostics/system_error/what-4.cc | 3 +-- .../19_diagnostics/system_error/what-big.cc | 5 ++--- 8 files changed, 40 insertions(+), 27 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 983a1e960fee..1af8a2861a15 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2010-09-16 Paolo Carlini + + * include/std/system_error (system_error::system_error(error_code), + system_error(error_code, const string&), system_error(int, const + error_category&), system_error(int, const error_category&, + const string&)): Fix for what() to return the NBTS recommended in + the Note in 19.5.6.2/14. + * testsuite/19_diagnostics/system_error/cons-1.cc: Adjust. + * testsuite/19_diagnostics/system_error/what-1.cc: Likewise. + * testsuite/19_diagnostics/system_error/what-2.cc: Likewise. + * testsuite/19_diagnostics/system_error/what-big.cc: Likewise. + * testsuite/19_diagnostics/system_error/what-3.cc: Likewise. + + * testsuite/19_diagnostics/system_error/what-4.cc: Tidy includes. + 2010-09-16 Paolo Carlini * include/std/complex (complex::operator=(float), diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error index e2242427e2e7..2c968e92e903 100644 --- a/libstdc++-v3/include/std/system_error +++ b/libstdc++-v3/include/std/system_error @@ -311,26 +311,29 @@ _GLIBCXX_BEGIN_NAMESPACE(std) public: system_error(error_code __ec = error_code()) - : runtime_error(""), _M_code(__ec) { } + : runtime_error(__ec.message()), _M_code(__ec) { } system_error(error_code __ec, const string& __what) - : runtime_error(__what), _M_code(__ec) { } - + : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { } + /* * TODO: Add const char* ctors to all exceptions. * * system_error(error_code __ec, const char* __what) - * : runtime_error(__what), _M_code(__ec) { } + * : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } * * system_error(int __v, const error_category& __ecat, const char* __what) - * : runtime_error(__what), _M_code(error_code(__v, __ecat)) { } + * : runtime_error(__what + (": " + __ec.message())), + * _M_code(error_code(__v, __ecat)) { } */ system_error(int __v, const error_category& __ecat) - : runtime_error(""), _M_code(error_code(__v, __ecat)) { } + : runtime_error(error_code(__v, __ecat).message()), + _M_code(__v, __ecat) { } system_error(int __v, const error_category& __ecat, const string& __what) - : runtime_error(__what), _M_code(error_code(__v, __ecat)) { } + : runtime_error(__what + ": " + error_code(__v, __ecat).message()), + _M_code(__v, __ecat) { } virtual ~system_error() throw(); 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 42f29798570d..4a145a993491 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, 2009 Free Software Foundation, Inc. +// Copyright (C) 2007, 2008, 2009, 2010 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 @@ -18,7 +18,7 @@ // with this library; see the file COPYING3. If not see // . -#include +#include #include #include @@ -33,14 +33,14 @@ int main() { std::system_error err1(e, s); VERIFY( err1.code() == e ); - VERIFY( std::strcmp(err1.runtime_error::what(), s.c_str()) == 0 ); + VERIFY( std::string(err1.what()).find(s) != std::string::npos ); } // 2 { 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 ); + VERIFY( std::string((err2.what(), s)).find(s) != std::string::npos ); } return 0; diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc index 213b196b5d08..9899dfb7ada5 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++0x" } -// Copyright (C) 2007, 2008, 2009 +// Copyright (C) 2007, 2008, 2009, 2010 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -22,7 +22,6 @@ #include #include -#include #include using namespace std; @@ -39,8 +38,8 @@ void test01() // 2 system_error obj2(error_code(), s); - VERIFY( strcmp(obj1.what(), s.data()) == 0 ); - VERIFY( strcmp(obj2.what(), s.data()) == 0 ); + VERIFY( string(obj1.what()).find(s.data()) != string::npos ); + VERIFY( string(obj2.what()).find(s.data()) != string::npos ); } void test02() @@ -49,7 +48,7 @@ void test02() string s("lack of sunlight error"); system_error x(error_code(), s); - VERIFY( strcmp(x.what(), s.data()) == 0 ); + VERIFY( string(x.what()).find(s.data()) != string::npos ); } int main(void) diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc index ff6641bd2b9a..b5fe39cb2344 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++0x" } -// Copyright (C) 2007, 2008, 2009 +// Copyright (C) 2007, 2008, 2009, 2010 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -22,7 +22,6 @@ #include #include -#include #include // libstdc++/2089 @@ -38,7 +37,7 @@ void test03() try { throw fuzzy_logic(); } catch(const fuzzy_logic& obj) - { VERIFY( std::strcmp("whoa", obj.what()) == 0 ); } + { VERIFY( std::string(obj.what()).find("whoa") != std::string::npos ); } catch(...) { VERIFY( false ); } } diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc index da4c80dfc1e5..d1d2ffee484a 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc @@ -20,7 +20,6 @@ #include #include -#include #include // test copy ctors, assignment operators, and persistence of member string data @@ -52,7 +51,7 @@ void test04() obj1 = obj2; } allocate_on_stack(); - VERIFY( std::strcmp(strlit1, obj1.what()) == 0 ); + VERIFY( std::string(obj1.what()).find(strlit1) != std::string::npos ); // block 02 { @@ -61,7 +60,7 @@ void test04() obj1 = obj3; } allocate_on_stack(); - VERIFY( std::strcmp(strlit2, obj1.what()) == 0 ); + VERIFY( std::string(obj1.what()).find(strlit2) != std::string::npos ); } int main(void) 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 2b5d51c45717..7c729c7f1174 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++0x" } -// Copyright (C) 2007, 2008, 2009 +// Copyright (C) 2007, 2008, 2009, 2010 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -20,7 +20,6 @@ // 19.1 Exception classes -#include #include #include #include diff --git a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc index f3c1309f5835..351fc2914d1b 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++0x" } -// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +// Copyright (C) 2007, 2008, 2009, 2010 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 @@ -17,7 +17,6 @@ // with this library; see the file COPYING3. If not see // . -#include #include #include #include @@ -30,7 +29,7 @@ void test01() bool test __attribute__((unused)) = true; const std::string xxx(10000, 'x'); test_type t(std::error_code(), xxx); - VERIFY( std::strcmp(t.what(), xxx.c_str()) == 0 ); + VERIFY( std::string(t.what()).find(xxx) != std::string::npos ); } int main(void)