From: Paolo Carlini Date: Tue, 5 Nov 2002 23:28:15 +0000 (+0100) Subject: re PR libstdc++/8466 (basic_stringbuf::str(basic_string const&) modifies its argument) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=81646a31577ecfcccac1ccb662012345361aa253;p=gcc.git re PR libstdc++/8466 (basic_stringbuf::str(basic_string const&) modifies its argument) 2002-11-05 Paolo Carlini 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 43908df6adf..12ae0f0dbcc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2002-11-05 Paolo Carlini + + 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 * 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 07e47b5d3d6..5eb43d09e59 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 91ee79bcf40..51635f72fd5 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; }