Author: hans Date: Mon Aug 7 12:49:04 2017 New Revision: 310287 URL: http://llvm.org/viewvc/llvm-project?rev=310287&view=rev Log: Merging r309838: ------------------------------------------------------------------------ r309838 | marshall | 2017-08-02 10:31:09 -0700 (Wed, 02 Aug 2017) | 1 line
Fix PR33727: std::basic_stringbuf only works with DefaultConstructible allocators. Thanks to Jonathan Wakely for the report and suggested fix ------------------------------------------------------------------------ Modified: libcxx/branches/release_50/ (props changed) libcxx/branches/release_50/include/sstream libcxx/branches/release_50/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp Propchange: libcxx/branches/release_50/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Aug 7 12:49:04 2017 @@ -1,2 +1,2 @@ /libcxx/branches/apple:136569-137939 -/libcxx/trunk:309296,309307,309917,309920 +/libcxx/trunk:309296,309307,309838,309917,309920 Modified: libcxx/branches/release_50/include/sstream URL: http://llvm.org/viewvc/llvm-project/libcxx/branches/release_50/include/sstream?rev=310287&r1=310286&r2=310287&view=diff ============================================================================== --- libcxx/branches/release_50/include/sstream (original) +++ libcxx/branches/release_50/include/sstream Mon Aug 7 12:49:04 2017 @@ -249,7 +249,8 @@ basic_stringbuf<_CharT, _Traits, _Alloca template <class _CharT, class _Traits, class _Allocator> basic_stringbuf<_CharT, _Traits, _Allocator>::basic_stringbuf(const string_type& __s, ios_base::openmode __wch) - : __hm_(0), + : __str_(__s.get_allocator()), + __hm_(0), __mode_(__wch) { str(__s); Modified: libcxx/branches/release_50/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/branches/release_50/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp?rev=310287&r1=310286&r2=310287&view=diff ============================================================================== --- libcxx/branches/release_50/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp (original) +++ libcxx/branches/release_50/test/std/input.output/string.streams/stringstream.cons/string.pass.cpp Mon Aug 7 12:49:04 2017 @@ -18,6 +18,16 @@ #include <sstream> #include <cassert> +template<typename T> +struct NoDefaultAllocator : std::allocator<T> +{ + template<typename U> struct rebind { using other = NoDefaultAllocator<U>; }; + NoDefaultAllocator(int id) : id(id) { } + template<typename U> NoDefaultAllocator(const NoDefaultAllocator<U>& a) : id(a.id) { } + int id; +}; + + int main() { { @@ -46,4 +56,13 @@ int main() ss << i << ' ' << 123; assert(ss.str() == L"456 1236 "); } + { // This is https://bugs.llvm.org/show_bug.cgi?id=33727 + typedef std::basic_string <char, std::char_traits<char>, NoDefaultAllocator<char> > S; + typedef std::basic_stringbuf<char, std::char_traits<char>, NoDefaultAllocator<char> > SB; + + S s(NoDefaultAllocator<char>(1)); + SB sb(s); + // This test is not required by the standard, but *where else* could it get the allocator? + assert(sb.str().get_allocator() == s.get_allocator()); + } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits