[libcxx] r217894 - Fix a bug in the move-assigment operator for basic_stringbuf. Thanks to Johnathan Wakeley for the bug report

Marshall Clow mclow.lists at gmail.com
Tue Sep 16 11:57:52 PDT 2014


Author: marshall
Date: Tue Sep 16 13:57:52 2014
New Revision: 217894

URL: http://llvm.org/viewvc/llvm-project?rev=217894&view=rev
Log:
Fix a bug in the move-assigment operator for basic_stringbuf. Thanks to Johnathan Wakeley for the bug report

Modified:
    libcxx/trunk/include/sstream
    libcxx/trunk/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp

Modified: libcxx/trunk/include/sstream
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/sstream?rev=217894&r1=217893&r2=217894&view=diff
==============================================================================
--- libcxx/trunk/include/sstream (original)
+++ libcxx/trunk/include/sstream Tue Sep 16 13:57:52 2014
@@ -325,11 +325,16 @@ basic_stringbuf<_CharT, _Traits, _Alloca
     __p = const_cast<char_type*>(__str_.data());
     if (__binp != -1)
         this->setg(__p + __binp, __p + __ninp, __p + __einp);
+    else
+        this->setg(nullptr, nullptr, nullptr);
     if (__bout != -1)
     {
         this->setp(__p + __bout, __p + __eout);
         this->pbump(__nout);
     }
+    else
+        this->setp(nullptr, nullptr);
+
     __hm_ = __hm == -1 ? nullptr : __p + __hm;
     __mode_ = __rhs.__mode_;
     __p = const_cast<char_type*>(__rhs.__str_.data());

Modified: libcxx/trunk/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp?rev=217894&r1=217893&r2=217894&view=diff
==============================================================================
--- libcxx/trunk/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp (original)
+++ libcxx/trunk/test/input.output/string.streams/istringstream/istringstream.assign/move.pass.cpp Tue Sep 16 13:57:52 2014
@@ -33,6 +33,24 @@ int main()
         ss >> i;
         assert(i == 456);
     }
+	{
+		std::istringstream s1("Aaaaa Bbbbb Cccccccccc Dddddddddddddddddd");
+		std::string s;
+		s1 >> s;
+
+		std::istringstream s2 = std::move(s1);
+		s2 >> s;
+		assert(s == "Bbbbb");
+
+		std::istringstream s3;
+		s3 = std::move(s2);
+		s3 >> s;
+		assert(s == "Cccccccccc");
+
+		s1 = std::move(s3);
+		s1 >> s;
+		assert(s == "Dddddddddddddddddd");
+	}
     {
         std::wistringstream ss0(L" 123 456");
         std::wistringstream ss;
@@ -46,5 +64,23 @@ int main()
         ss >> i;
         assert(i == 456);
     }
+	{
+		std::wistringstream s1(L"Aaaaa Bbbbb Cccccccccc Dddddddddddddddddd");
+		std::wstring s;
+		s1 >> s;
+
+		std::wistringstream s2 = std::move(s1);
+		s2 >> s;
+		assert(s == L"Bbbbb");
+
+		std::wistringstream s3;
+		s3 = std::move(s2);
+		s3 >> s;
+		assert(s == L"Cccccccccc");
+
+		s1 = std::move(s3);
+		s1 >> s;
+		assert(s == L"Dddddddddddddddddd");
+	}
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 }





More information about the cfe-commits mailing list