From 8bdbff37febe7a0d0f5c59fe3714c30f2d064a24 Mon Sep 17 00:00:00 2001 From: Simon Dardis Date: Mon, 6 Nov 2017 23:01:46 +0000 Subject: [PATCH] [Support][Chrono] Use explicit cast of text output of time values. rL316419 exposed a platform specific issue where the type of the values passed to llvm::format could be different to the format string. Debian unstable for mips uses long long int for std::chrono:duration, while x86_64 uses long int. For mips, this resulted in the value being corrupted when rendered to a string. Address this by explicitly casting the result of the duration_cast to the type specified in the format string. Reviewers: sammccall Differential Revision: https://reviews.llvm.org/D39597 llvm-svn: 317523 --- llvm/lib/Support/Chrono.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Support/Chrono.cpp b/llvm/lib/Support/Chrono.cpp index a39b485..84f5aab 100644 --- a/llvm/lib/Support/Chrono.cpp +++ b/llvm/lib/Support/Chrono.cpp @@ -65,17 +65,17 @@ void format_provider>::format(const TimePoint<> &T, raw_ostream &OS, if (Style[I] == '%' && Style.size() > I + 1) switch (Style[I + 1]) { case 'L': // Milliseconds, from Ruby. FStream << llvm::format( - "%.3lu", duration_cast(Fractional).count()); + "%.3lu", (long)duration_cast(Fractional).count()); ++I; continue; case 'f': // Microseconds, from Python. FStream << llvm::format( - "%.6lu", duration_cast(Fractional).count()); + "%.6lu", (long)duration_cast(Fractional).count()); ++I; continue; case 'N': // Nanoseconds, from date(1). FStream << llvm::format( - "%.6lu", duration_cast(Fractional).count()); + "%.6lu", (long)duration_cast(Fractional).count()); ++I; continue; case '%': // Consume %%, so %%f parses as (%%)f not %(%f) -- 2.7.4