Page MenuHomePhabricator

[libcxx] Fix basic_stringbuf constructor

Authored by miyuki on Dec 1 2017, 2:41 AM.



[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.

Diff Detail


Event Timeline

miyuki created this revision.Dec 1 2017, 2:41 AM
mclow.lists edited edge metadata.Dec 11 2017, 10:57 AM

This looks good to me; with a couple of nits.

26 ↗(On Diff #125088)

Not zero, please. nullptr or NULL .
nullptr would be better, but we can't assume c++11 here, so I guess it's NULL.

miyuki updated this revision to Diff 126738.Dec 13 2017, 5:20 AM

Modified the test to use NULL instead of literal zero.

miyuki marked an inline comment as done.Dec 13 2017, 5:20 AM
miyuki updated this revision to Diff 126739.Dec 13 2017, 5:24 AM

Use diff with context.

mclow.lists accepted this revision.Dec 13 2017, 7:31 AM

LGTM. Do you need someone to commit it?

This revision is now accepted and ready to land.Dec 13 2017, 7:31 AM

Yes, I don't have write access.

lichray edited the summary of this revision. (Show Details)Dec 13 2017, 10:12 AM
This revision was automatically updated to reflect the committed changes.