forked from OSchip/llvm-project
[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 llvm-svn: 320604
This commit is contained in:
parent
f02a39c371
commit
378ae52b10
|
@ -243,7 +243,6 @@ basic_stringbuf<_CharT, _Traits, _Allocator>::basic_stringbuf(ios_base::openmode
|
|||
: __hm_(0),
|
||||
__mode_(__wch)
|
||||
{
|
||||
str(string_type());
|
||||
}
|
||||
|
||||
template <class _CharT, class _Traits, class _Allocator>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue