diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index d5d48526f03..557cb7d911f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,6 +1,10 @@ 2001-02-27 Benjamin Kosnik - * 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 diff --git a/libstdc++-v3/include/bits/std_stdexcept.h b/libstdc++-v3/include/bits/std_stdexcept.h index dc503aa35a6..ee9ebf19449 100644 --- a/libstdc++-v3/include/bits/std_stdexcept.h +++ b/libstdc++-v3/include/bits/std_stdexcept.h @@ -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 diff --git a/libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc b/libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc index 11816ba1560..d5a20583977 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc @@ -69,12 +69,48 @@ void test03() { VERIFY( false ); } } +// test copy ctors and assignment operators +// libstdc++/1972 +// via Greg Bumgardner +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; }