Author: ericwf Date: Fri Apr 29 02:23:20 2016 New Revision: 268009 URL: http://llvm.org/viewvc/llvm-project?rev=268009&view=rev Log: Fix PR21428 for long. Buffer was one byte too small in octal formatting case. Rename previously added test
Added: libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp Removed: libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass Modified: libcxx/trunk/include/locale Modified: libcxx/trunk/include/locale URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/locale?rev=268009&r1=268008&r2=268009&view=diff ============================================================================== --- libcxx/trunk/include/locale (original) +++ libcxx/trunk/include/locale Fri Apr 29 02:23:20 2016 @@ -1375,7 +1375,7 @@ num_put<_CharT, _OutputIterator>::do_put this->__format_int(__fmt+1, __len, true, __iob.flags()); const unsigned __nbuf = (numeric_limits<long>::digits / 3) + ((numeric_limits<long>::digits % 3) != 0) - + 1; + + 2; char __nar[__nbuf]; int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v); char* __ne = __nar + __nc; Removed: libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass?rev=268008&view=auto ============================================================================== --- libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass (original) +++ libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass (removed) @@ -1,85 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <ostream> - -// template <class charT, class traits = char_traits<charT> > -// class basic_ostream; - -// operator<<( int16_t val); -// operator<<(uint16_t val); -// operator<<( int32_t val); -// operator<<(uint32_t val); -// operator<<( int64_t val); -// operator<<(uint64_t val); - -// Testing to make sure that the max length values are correctly inserted - -#include <iostream> -#include <cctype> -#include <sstream> -#include <cassert> - -template <typename T> -void test_octal(const char *expected) -{ - std::stringstream ss; - ss << std::oct << static_cast<T>(-1); - - assert(ss.str() == expected); -} - -template <typename T> -void test_dec(const char *expected) -{ - std::stringstream ss; - ss << std::dec << static_cast<T>(-1); - -// std::cout << ss.str() << " " << expected << std::endl; - assert(ss.str() == expected); -} - -template <typename T> -void test_hex(const char *expected) -{ - std::stringstream ss; - ss << std::hex << static_cast<T>(-1); - - std::string str = ss.str(); - for (size_t i = 0; i < str.size(); ++i ) - str[i] = std::toupper(str[i]); - - assert(str == expected); -} - -int main(int argc, char* argv[]) -{ - test_octal<uint16_t>( "177777"); - test_octal< int16_t>( "177777"); - test_octal<uint32_t>( "37777777777"); - test_octal< int32_t>( "37777777777"); - test_octal<uint64_t>("1777777777777777777777"); - test_octal< int64_t>("1777777777777777777777"); - - test_dec<uint16_t>( "65535"); - test_dec< int16_t>( "-1"); - test_dec<uint32_t>( "4294967295"); - test_dec< int32_t>( "-1"); - test_dec<uint64_t>("18446744073709551615"); - test_dec< int64_t>( "-1"); - - test_hex<uint16_t>( "FFFF"); - test_hex< int16_t>( "FFFF"); - test_hex<uint32_t>( "FFFFFFFF"); - test_hex< int32_t>( "FFFFFFFF"); - test_hex<uint64_t>("FFFFFFFFFFFFFFFF"); - test_hex< int64_t>("FFFFFFFFFFFFFFFF"); - - return 0; -} Added: libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp?rev=268009&view=auto ============================================================================== --- libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp (added) +++ libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp Fri Apr 29 02:23:20 2016 @@ -0,0 +1,107 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <ostream> + +// template <class charT, class traits = char_traits<charT> > +// class basic_ostream; + +// operator<<( int16_t val); +// operator<<(uint16_t val); +// operator<<( int32_t val); +// operator<<(uint32_t val); +// operator<<( int64_t val); +// operator<<(uint64_t val); + +// Testing to make sure that the max length values are correctly inserted + +#include <sstream> +#include <ios> +#include <cctype> +#include <cstdint> +#include <cassert> + +template <typename T> +void test_octal(const char *expected) +{ + std::stringstream ss; + ss << std::oct << static_cast<T>(-1); + assert(ss.str() == expected); +} + +template <typename T> +void test_dec(const char *expected) +{ + std::stringstream ss; + ss << std::dec << static_cast<T>(-1); + assert(ss.str() == expected); +} + +template <typename T> +void test_hex(const char *expected) +{ + std::stringstream ss; + ss << std::hex << static_cast<T>(-1); + + std::string str = ss.str(); + for (size_t i = 0; i < str.size(); ++i ) + str[i] = std::toupper(str[i]); + + assert(str == expected); +} + +int main(int argc, char* argv[]) +{ + + test_octal<uint16_t>( "177777"); + test_octal< int16_t>( "177777"); + test_octal<uint32_t>( "37777777777"); + test_octal< int32_t>( "37777777777"); + test_octal<uint64_t>("1777777777777777777777"); + test_octal< int64_t>("1777777777777777777777"); + test_octal<uint64_t>("1777777777777777777777"); + if (sizeof(long) == sizeof(int64_t)) { + test_octal< unsigned long>("1777777777777777777777"); + test_octal< long>("1777777777777777777777"); + } + if (sizeof(long long) == sizeof(int64_t)) { + test_octal< unsigned long long>("1777777777777777777777"); + test_octal< long long>("1777777777777777777777"); + } + + test_dec<uint16_t>( "65535"); + test_dec< int16_t>( "-1"); + test_dec<uint32_t>( "4294967295"); + test_dec< int32_t>( "-1"); + test_dec<uint64_t>("18446744073709551615"); + test_dec< int64_t>( "-1"); + if (sizeof(long) == sizeof(int64_t)) { + test_dec<unsigned long>("18446744073709551615"); + test_dec< long>( "-1"); + } + if (sizeof(long long) == sizeof(int64_t)) { + test_dec<unsigned long long>("18446744073709551615"); + test_dec< long long>( "-1"); + } + + test_hex<uint16_t>( "FFFF"); + test_hex< int16_t>( "FFFF"); + test_hex<uint32_t>( "FFFFFFFF"); + test_hex< int32_t>( "FFFFFFFF"); + test_hex<uint64_t>("FFFFFFFFFFFFFFFF"); + test_hex< int64_t>("FFFFFFFFFFFFFFFF"); + if (sizeof(long) == sizeof(int64_t)) { + test_hex<unsigned long>("FFFFFFFFFFFFFFFF"); + test_hex< long>("FFFFFFFFFFFFFFFF"); + } + if (sizeof(long long) == sizeof(int64_t)) { + test_hex<unsigned long long>("FFFFFFFFFFFFFFFF"); + test_hex< long long>("FFFFFFFFFFFFFFFF"); + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits