aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2013-09-23 09:36:11 -0700
committerPaul Pluzhnikov <ppluzhnikov@gcc.gnu.org>2013-09-23 09:36:11 -0700
commitdfff7c46929d43dac828cd232c231dcb5bd7653a (patch)
tree4f6ac1b7bd6bae24e2e6b5b988bdddbc29fc992e
parentcefce769080113bd634bca165cd6c2a8c817337b (diff)
downloadgcc-dfff7c46929d43dac828cd232c231dcb5bd7653a.zip
gcc-dfff7c46929d43dac828cd232c231dcb5bd7653a.tar.gz
gcc-dfff7c46929d43dac828cd232c231dcb5bd7653a.tar.bz2
snprintf_lite.cc (__concat_size_t): Use unsigned long long conditionally.
2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com> * src/c++11/snprintf_lite.cc (__concat_size_t): Use unsigned long long conditionally. From-SVN: r202836
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/src/c++11/snprintf_lite.cc12
2 files changed, 14 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index ab960e7..8c201f1 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,10 @@
2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com>
+ * src/c++11/snprintf_lite.cc (__concat_size_t): Use
+ unsigned long long conditionally.
+
+2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com>
+
* src/c++11/snprintf_lite.cc (__concat_size_t): Use only
std::__int_to_char<unsigned long long>()
diff --git a/libstdc++-v3/src/c++11/snprintf_lite.cc b/libstdc++-v3/src/c++11/snprintf_lite.cc
index 02a8187..1e0ccec 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<char*>(__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)