[llvm] 4b3dbaa - Fix nanosecond printing for TimePoint formatter.
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 14 15:51:49 PDT 2023
Author: Eli Friedman
Date: 2023-07-14T15:51:23-07:00
New Revision: 4b3dbaaa32420ab2cb66981b03122e2e4804f7eb
URL: https://github.com/llvm/llvm-project/commit/4b3dbaaa32420ab2cb66981b03122e2e4804f7eb
DIFF: https://github.com/llvm/llvm-project/commit/4b3dbaaa32420ab2cb66981b03122e2e4804f7eb.diff
LOG: Fix nanosecond printing for TimePoint formatter.
There was a copy-paste of the wrong field width, so the nanoseconds
weren't correctly padded with zeros. Found by inspection.
Added:
Modified:
llvm/lib/Support/Chrono.cpp
llvm/unittests/Support/Chrono.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/Chrono.cpp b/llvm/lib/Support/Chrono.cpp
index 8c28d45d882282..859ece8f550080 100644
--- a/llvm/lib/Support/Chrono.cpp
+++ b/llvm/lib/Support/Chrono.cpp
@@ -74,7 +74,7 @@ void format_provider<TimePoint<>>::format(const TimePoint<> &T, raw_ostream &OS,
continue;
case 'N': // Nanoseconds, from date(1).
FStream << llvm::format(
- "%.6lu", (long)duration_cast<nanoseconds>(Fractional).count());
+ "%.9lu", (long)duration_cast<nanoseconds>(Fractional).count());
++I;
continue;
case '%': // Consume %%, so %%f parses as (%%)f not %(%f)
diff --git a/llvm/unittests/Support/Chrono.cpp b/llvm/unittests/Support/Chrono.cpp
index 9a08a5c1bfdff4..daf8a8a350f08c 100644
--- a/llvm/unittests/Support/Chrono.cpp
+++ b/llvm/unittests/Support/Chrono.cpp
@@ -42,15 +42,21 @@ TEST(Chrono, TimePointFormat) {
TM.tm_isdst = -1;
TimePoint<> T =
system_clock::from_time_t(mktime(&TM)) + nanoseconds(123456789);
+ TimePoint<> T2 =
+ system_clock::from_time_t(mktime(&TM)) + nanoseconds(23456789);
// operator<< uses the format YYYY-MM-DD HH:MM:SS.NNNNNNNNN
std::string S;
raw_string_ostream OS(S);
OS << T;
EXPECT_EQ("2006-01-02 15:04:05.123456789", OS.str());
+ S.clear();
+ OS << T2;
+ EXPECT_EQ("2006-01-02 15:04:05.023456789", OS.str());
// formatv default style matches operator<<.
EXPECT_EQ("2006-01-02 15:04:05.123456789", formatv("{0}", T).str());
+ EXPECT_EQ("2006-01-02 15:04:05.023456789", formatv("{0}", T2).str());
// formatv supports strftime-style format strings.
EXPECT_EQ("15:04:05", formatv("{0:%H:%M:%S}", T).str());
// formatv supports our strftime extensions for sub-second precision.
More information about the llvm-commits
mailing list