From b67df9f5a0602b6b67b23e8007629275335b52af 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317523 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Chrono.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Support/Chrono.cpp b/lib/Support/Chrono.cpp index a39b485bd13..84f5aab6fc4 100644 --- a/lib/Support/Chrono.cpp +++ b/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.40.0