]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
system_error (system_error::system_error(error_code), [...]): Fix for what() to retur...
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 16 Sep 2010 14:55:37 +0000 (14:55 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 16 Sep 2010 14:55:37 +0000 (14:55 +0000)
2010-09-16  Paolo Carlini  <paolo.carlini@oracle.com>

* 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
libstdc++-v3/include/std/system_error
libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc

index 983a1e960feecfd8cbac5f069572fa2ec34ea955..1af8a2861a15057c1d7a82275ac114d510600d58 100644 (file)
@@ -1,3 +1,18 @@
+2010-09-16  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * 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  <paolo.carlini@oracle.com>
 
        * include/std/complex (complex<float>::operator=(float),
index e2242427e2e7298868afabc79902d08e61895d38..2c968e92e9032b4959c489471192639a65b313e7 100644 (file)
@@ -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();
 
index 42f29798570de70064ac2bfc3531294cff0cd1f8..4a145a993491f062181864b4989320b04463d202 100644 (file)
@@ -1,7 +1,7 @@
 // { dg-options "-std=gnu++0x" }
 // 2007-06-05 Benjamin Kosnik  <bkoz@redhat.com>
 
-// 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
 // <http://www.gnu.org/licenses/>.
 
-#include <cstring>
+#include <string>
 #include <system_error>
 #include <testsuite_hooks.h>
 
@@ -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;
index 213b196b5d085a395a6a09b47a94363df54587e2..9899dfb7ada5d5cfd2afae2b01173a080e1a11d5 100644 (file)
@@ -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 <string>
 #include <system_error>
-#include <cstring>
 #include <testsuite_hooks.h>
 
 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)
index ff6641bd2b9a5f5e46ef2369701fa1580e93d0ad..b5fe39cb2344cc9e13dc569030010c997da4a849 100644 (file)
@@ -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 <string>
 #include <system_error>
-#include <cstring>
 #include <testsuite_hooks.h>
 
 // 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 ); }
 }
index da4c80dfc1e5b1a06245060c16c2698b70af73cd..d1d2ffee484ab09c57f02129f7a8c0652dfa9b5e 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <string>
 #include <system_error>
-#include <cstring>
 #include <testsuite_hooks.h>
 
 // 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)
index 2b5d51c457172dd94a360ef043d965ff4d22c633..7c729c7f11740cceaab2d626599e7007df7df090 100644 (file)
@@ -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 <cstring>
 #include <string>
 #include <system_error>
 #include <testsuite_hooks.h>
index f3c1309f58357101c3307c2ed6ec4b15306804fc..351fc2914d1bcb5dbe57963d61e3b0dc0d9d16b9 100644 (file)
@@ -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
 // <http://www.gnu.org/licenses/>.
 
-#include <cstring>
 #include <string>
 #include <system_error>
 #include <testsuite_hooks.h>
@@ -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)