From dfff7c46929d43dac828cd232c231dcb5bd7653a Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Mon, 23 Sep 2013 09:36:11 -0700 Subject: [PATCH] snprintf_lite.cc (__concat_size_t): Use unsigned long long conditionally. 2013-09-23 Paul Pluzhnikov * src/c++11/snprintf_lite.cc (__concat_size_t): Use unsigned long long conditionally. From-SVN: r202836 --- libstdc++-v3/ChangeLog | 5 +++++ libstdc++-v3/src/c++11/snprintf_lite.cc | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ab960e7ffeb2..8c201f1c3f08 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Paul Pluzhnikov + + * src/c++11/snprintf_lite.cc (__concat_size_t): Use + unsigned long long conditionally. + 2013-09-23 Paul Pluzhnikov * src/c++11/snprintf_lite.cc (__concat_size_t): Use only diff --git a/libstdc++-v3/src/c++11/snprintf_lite.cc b/libstdc++-v3/src/c++11/snprintf_lite.cc index 02a818744cb3..1e0ccec813aa 100644 --- a/libstdc++-v3/src/c++11/snprintf_lite.cc +++ b/libstdc++-v3/src/c++11/snprintf_lite.cc @@ -69,11 +69,17 @@ namespace __gnu_cxx { // Returns number of characters appended, or -1 if BUFSIZE is too small. int __concat_size_t(char *__buf, size_t __bufsize, size_t __val) { + // __int_to_char is explicitly instantiated and available only for + // some, but not all, types. See locale-inst.cc. +#ifdef _GLIBCXX_USE_LONG_LONG + unsigned long long __val2 = __val; +#else + unsigned long __val2 = __val; +#endif // Long enough for decimal representation. - unsigned long long __val_ull = __val; - int __ilen = 3 * sizeof(__val_ull); + int __ilen = 3 * sizeof(__val2); char *__cs = static_cast(__builtin_alloca(__ilen)); - size_t __len = std::__int_to_char(__cs + __ilen, __val_ull, + size_t __len = std::__int_to_char(__cs + __ilen, __val2, std::__num_base::_S_atoms_out, std::ios_base::dec, true); if (__bufsize < __len)