std_stdexcept.h (runtime_error): Make string member non-const.
authorBenjamin Kosnik <bkoz@redhat.com>
Tue, 27 Feb 2001 23:00:35 +0000 (23:00 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Tue, 27 Feb 2001 23:00:35 +0000 (23:00 +0000)
2001-02-27  Benjamin Kosnik  <bkoz@redhat.com>

* include/bits/std_stdexcept.h (runtime_error): Make string
member non-const.
(logic_error): Same.
* testsuite/19_diagnostics/stdexceptions.cc (test04): Add test.
(test03): Fix.

From-SVN: r40098

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/std_stdexcept.h
libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc

index d5d4852..557cb7d 100644 (file)
@@ -1,6 +1,10 @@
 2001-02-27  Benjamin Kosnik  <bkoz@redhat.com>
 
-       * testsuite/19_diagnostics/stdexceptions.cc (test03): Fix.
+       * include/bits/std_stdexcept.h (runtime_error): Make string
+       member non-const.
+       (logic_error): Same.
+       * testsuite/19_diagnostics/stdexceptions.cc (test04): Add test.
+       (test03): Fix.
 
 2001-02-26  Benjamin Kosnik  <bkoz@redhat.com>
 
index dc503aa..ee9ebf1 100644 (file)
@@ -43,7 +43,7 @@ namespace std
 {
   class logic_error : public exception 
   {
-    const string _M_msg;
+    string _M_msg;
 
   public:
     explicit 
@@ -82,7 +82,7 @@ namespace std
 
   class runtime_error : public exception 
   {
-    const string _M_msg;
+    string _M_msg;
 
   public:
     explicit 
index 11816ba..d5a2058 100644 (file)
@@ -69,12 +69,48 @@ void test03()
     { VERIFY( false ); }
 }
 
+// test copy ctors and assignment operators
+// libstdc++/1972
+// via Greg Bumgardner <bumgard@roguewave.com>
+void allocate_on_stack(void) 
+{
+  const size_t num = 512;
+  __extension__ char array[num];
+  for (size_t i = 0; i < num; i++) 
+    array[i]=0;
+}
+void test04()
+{
+  const std::string s("CA ISO emergency once again:immediate power down");
+  const char* strlit1 = "wish I lived in Palo Alto";
+  const char* strlit2 = "...or Santa Barbara";
+  std::runtime_error obj1(s);
+  
+  // block 01
+  {
+    const std::string s2(strlit1);
+    std::runtime_error obj2(s2);
+    obj1 = obj2;
+  }
+  allocate_on_stack();
+  VERIFY( strcmp(strlit1, obj1.what()) == 0 ); 
+
+  // block 02
+  {
+    const std::string s3(strlit2);
+    std::runtime_error obj3 = std::runtime_error(s3);
+    obj1 = obj3;
+  }
+  allocate_on_stack();     
+  VERIFY( strcmp(strlit2, obj1.what()) == 0 ); 
+}
 
 int main(void)
 {
   test01();
   test02();
   test03();
-  
+  test04();
+
   return 0;
 }