[libcxx] r330955 - Move old test into test/libcxx, and implement new version of test for ostreambuf_iterator::failed. Fixes PR#37245. Thanks to Billy O'Neill for the bug report.
Marshall Clow via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 26 09:16:45 PDT 2018
Author: marshall
Date: Thu Apr 26 09:16:45 2018
New Revision: 330955
URL: http://llvm.org/viewvc/llvm-project?rev=330955&view=rev
Log:
Move old test into test/libcxx, and implement new version of test for ostreambuf_iterator::failed. Fixes PR#37245. Thanks to Billy O'Neill for the bug report.
Added:
libcxx/trunk/test/libcxx/iterators/failed.pass.cpp
- copied, changed from r330716, libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp
Modified:
libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp
Copied: libcxx/trunk/test/libcxx/iterators/failed.pass.cpp (from r330716, libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/iterators/failed.pass.cpp?p2=libcxx/trunk/test/libcxx/iterators/failed.pass.cpp&p1=libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp&r1=330716&r2=330955&rev=330955&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/iterators/failed.pass.cpp Thu Apr 26 09:16:45 2018
@@ -12,6 +12,8 @@
// class ostreambuf_iterator
// bool failed() const throw();
+//
+// Extension: constructing from NULL is UB; we just make it a failed iterator
#include <iterator>
#include <sstream>
Modified: libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp?rev=330955&r1=330954&r2=330955&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp (original)
+++ libcxx/trunk/test/std/iterators/stream.iterators/ostreambuf.iterator/ostreambuf.iter.ops/failed.pass.cpp Thu Apr 26 09:16:45 2018
@@ -17,14 +17,27 @@
#include <sstream>
#include <cassert>
+template <typename Char, typename Traits = std::char_traits<Char> >
+struct my_streambuf : public std::basic_streambuf<Char,Traits> {
+ typedef typename std::basic_streambuf<Char,Traits>::int_type int_type;
+ typedef typename std::basic_streambuf<Char,Traits>::char_type char_type;
+
+ my_streambuf() {}
+ int_type sputc(char_type) { return Traits::eof(); }
+ };
+
int main()
{
{
- std::ostreambuf_iterator<char> i(nullptr);
+ my_streambuf<char> buf;
+ std::ostreambuf_iterator<char> i(&buf);
+ i = 'a';
assert(i.failed());
}
{
- std::ostreambuf_iterator<wchar_t> i(nullptr);
+ my_streambuf<wchar_t> buf;
+ std::ostreambuf_iterator<wchar_t> i(&buf);
+ i = L'a';
assert(i.failed());
}
}
More information about the cfe-commits
mailing list