From aefeecffdd75290ccf26020d77e61230fa8aa558 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Tue, 4 Dec 2018 17:15:23 +0000 Subject: [PATCH] [dsymutil] Ensure we're comparing time stamps with the same precision. After TimePoint's precision was increased in LLVM we started seeing failures because the modification times didn't match. This adds a time cast to ensure that we're comparing TimePoints with the same amount of precision. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@348283 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/dsymutil/DwarfLinker.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index 2c5cce50132..2862739fd73 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -2417,15 +2417,20 @@ bool DwarfLinker::link(const DebugMap &Map) { warn(Err.message()); continue; } - if (!Options.NoTimestamp && - Stat.getLastModificationTime() != - sys::TimePoint<>(LinkContext.DMO.getTimestamp())) { - // Not using the helper here as we can easily stream TimePoint<>. - WithColor::warning() - << "Timestamp mismatch for " << File << ": " - << Stat.getLastModificationTime() << " and " - << sys::TimePoint<>(LinkContext.DMO.getTimestamp()) << "\n"; - continue; + if (!Options.NoTimestamp) { + // The modification can have sub-second precision so we need to cast + // away the extra precision that's not present in the debug map. + auto ModificationTime = + std::chrono::time_point_cast( + Stat.getLastModificationTime()); + if (ModificationTime != LinkContext.DMO.getTimestamp()) { + // Not using the helper here as we can easily stream TimePoint<>. + WithColor::warning() + << "Timestamp mismatch for " << File << ": " + << Stat.getLastModificationTime() << " and " + << sys::TimePoint<>(LinkContext.DMO.getTimestamp()) << "\n"; + continue; + } } // Copy the module into the .swift_ast section. -- 2.11.0