aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@unitus.it>2002-11-06 00:28:15 +0100
committerPaolo Carlini <paolo@gcc.gnu.org>2002-11-05 23:28:15 +0000
commit81646a31577ecfcccac1ccb662012345361aa253 (patch)
treef308c2759f4d62cb03bc1efb4f23c17d1b7bb7f5
parente9577224cca5c707d48b5b529ff3e9a2dbeffcdb (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--libstdc++-v3/include/std/std_sstream.h3
-rw-r--r--libstdc++-v3/testsuite/27_io/stringstream_members.cc16
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;
}