Author: lichray Date: Wed Dec 13 10:12:55 2017 New Revision: 320604 URL: http://llvm.org/viewvc/llvm-project?rev=320604&view=rev Log: [libcxx] Fix basic_stringbuf constructor
Summary: [libcxx] Fix basic_stringbuf constructor The C++ Standard [stringbuf.cons]p1 defines the effects of the basic_stringbuf constructor that takes ios_base::openmode as follows: Effects: Constructs an object of class basic_stringbuf, initializing the base class with basic_streambuf(), and initializing mode with which. Postconditions: str() == "". The default constructor of basic_streambuf shall initialize all its pointer member objects to null pointers [streambuf.cons]p1. Currently libc++ calls "str(string_type());" in the aforementioned constructor setting basic_streambuf's pointers to a non-null value. This patch removes the call (note that the postcondition str() == "" remains valid because __str_ is default-initialized) and adds a test checking that the basic_streambuf's pointers are null after construction. Thanks Mikhail Maltsev for the patch. Reviewers: EricWF, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D40707 Modified: libcxx/trunk/include/sstream libcxx/trunk/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp Modified: libcxx/trunk/include/sstream URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/sstream?rev=320604&r1=320603&r2=320604&view=diff ============================================================================== --- libcxx/trunk/include/sstream (original) +++ libcxx/trunk/include/sstream Wed Dec 13 10:12:55 2017 @@ -243,7 +243,6 @@ basic_stringbuf<_CharT, _Traits, _Alloca : __hm_(0), __mode_(__wch) { - str(string_type()); } template <class _CharT, class _Traits, class _Allocator> Modified: libcxx/trunk/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp?rev=320604&r1=320603&r2=320604&view=diff ============================================================================== --- libcxx/trunk/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp (original) +++ libcxx/trunk/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp Wed Dec 13 10:12:55 2017 @@ -17,6 +17,21 @@ #include <sstream> #include <cassert> +template<typename CharT> +struct testbuf + : std::basic_stringbuf<CharT> +{ + void check() + { + assert(this->eback() == NULL); + assert(this->gptr() == NULL); + assert(this->egptr() == NULL); + assert(this->pbase() == NULL); + assert(this->pptr() == NULL); + assert(this->epptr() == NULL); + } +}; + int main() { { @@ -27,4 +42,12 @@ int main() std::wstringbuf buf; assert(buf.str() == L""); } + { + testbuf<char> buf; + buf.check(); + } + { + testbuf<wchar_t> buf; + buf.check(); + } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits