diff options
author | Paolo Carlini <pcarlini@unitus.it> | 2002-11-06 00:28:15 +0100 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2002-11-05 23:28:15 +0000 |
commit | 81646a31577ecfcccac1ccb662012345361aa253 (patch) | |
tree | f308c2759f4d62cb03bc1efb4f23c17d1b7bb7f5 | |
parent | e9577224cca5c707d48b5b529ff3e9a2dbeffcdb (diff) | |
download | gcc-81646a31577ecfcccac1ccb662012345361aa253.zip gcc-81646a31577ecfcccac1ccb662012345361aa253.tar.gz gcc-81646a31577ecfcccac1ccb662012345361aa253.tar.bz2 |
re PR libstdc++/8466 (basic_stringbuf::str(basic_string const&) modifies its argument)
2002-11-05 Paolo Carlini <pcarlini@unitus.it>
PR libstdc++/8466
* include/std/std_sstream.h
(basic_stringbuf::str(const __string_type&)):
Cannot use simple assignment since the COW-nature of v3
basic_string is not taken into account in basic_stringbuf.
* testsuite/27_io/stringstream_members.cc: Add test04 from PR.
From-SVN: r58838
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/std/std_sstream.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/stringstream_members.cc | 16 |
3 files changed, 27 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 43908df..12ae0f0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2002-11-05 Paolo Carlini <pcarlini@unitus.it> + + PR libstdc++/8466 + * include/std/std_sstream.h + (basic_stringbuf::str(const __string_type&)): + Cannot use simple assignment since the COW-nature of v3 + basic_string is not taken into account in basic_stringbuf. + * testsuite/27_io/stringstream_members.cc: Add test04 from PR. + 2002-11-05 John David Anglin <dave@hiauly1.hia.nrc.ca> * configure.target (hppa*): Define cpu_include_dir. diff --git a/libstdc++-v3/include/std/std_sstream.h b/libstdc++-v3/include/std/std_sstream.h index 07e47b5..5eb43d0 100644 --- a/libstdc++-v3/include/std/std_sstream.h +++ b/libstdc++-v3/include/std/std_sstream.h @@ -105,7 +105,8 @@ namespace std void str(const __string_type& __s) { - _M_string = __s; + // Cannot use _M_string = __s, since v3 strings are COW. + _M_string.assign(__s.c_str(), __s.size()); _M_stringbuf_init(_M_mode); } diff --git a/libstdc++-v3/testsuite/27_io/stringstream_members.cc b/libstdc++-v3/testsuite/27_io/stringstream_members.cc index 91ee79b..51635f7 100644 --- a/libstdc++-v3/testsuite/27_io/stringstream_members.cc +++ b/libstdc++-v3/testsuite/27_io/stringstream_members.cc @@ -177,10 +177,26 @@ test03() std::stringstream ss2(str3, std::ios_base::in|std::ios_base::out); } +// libstdc++/8466 +void test04() +{ + bool test = true; + + const char* strlit00 = "orvieto"; + const std::string str00 = strlit00; + + std::ostringstream oss; + + oss.str(str00); + oss << "cortona"; + VERIFY( str00 == strlit00 ); +} + int main() { test01(); test02(); test03(); + test04(); return 0; } |