summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons
diff options
context:
space:
mode:
authorZhihao Yuan <zy@miator.net>2017-12-13 18:12:55 +0000
committerZhihao Yuan <zy@miator.net>2017-12-13 18:12:55 +0000
commit378ae52b1013e35edfdaf7d3ffdb50aa630eea97 (patch)
treefb8d30aa46d5ece32fd382fa3fc1a19dd9d109eb /libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons
parentf02a39c371d7a0c9a0723b3b7a1989d6da91c89d (diff)
downloadbcm5719-llvm-378ae52b1013e35edfdaf7d3ffdb50aa630eea97.tar.gz
bcm5719-llvm-378ae52b1013e35edfdaf7d3ffdb50aa630eea97.zip
[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
Diffstat (limited to 'libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons')
-rw-r--r--libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp b/libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp
index 28007c8edf4..af2cccc9637 100644
--- a/libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp
+++ b/libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.cons/default.pass.cpp
@@ -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();
+ }
}
OpenPOWER on IntegriCloud