Skip to content

Commit 27b3ae8

Browse files
committed
[clang][deps] Initialize build session timestamp properly
1 parent 5b72c42 commit 27b3ae8

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h"
1313
#include "clang/Tooling/DependencyScanning/InProcessModuleCache.h"
1414
#include "llvm/ADT/BitmaskEnum.h"
15+
#include "llvm/Support/Chrono.h"
1516

1617
namespace clang {
1718
namespace tooling {
@@ -84,7 +85,9 @@ class DependencyScanningService {
8485
DependencyScanningService(
8586
ScanningMode Mode, ScanningOutputFormat Format,
8687
ScanningOptimizations OptimizeArgs = ScanningOptimizations::Default,
87-
bool EagerLoadModules = false, bool TraceVFS = false);
88+
bool EagerLoadModules = false, bool TraceVFS = false,
89+
std::time_t BuildSessionTimestamp =
90+
llvm::sys::toTimeT(std::chrono::system_clock::now()));
8891

8992
ScanningMode getMode() const { return Mode; }
9093

@@ -102,6 +105,8 @@ class DependencyScanningService {
102105

103106
ModuleCacheEntries &getModuleCacheEntries() { return ModCacheEntries; }
104107

108+
std::time_t getBuildSessionTimestamp() const { return BuildSessionTimestamp; }
109+
105110
private:
106111
const ScanningMode Mode;
107112
const ScanningOutputFormat Format;
@@ -115,6 +120,8 @@ class DependencyScanningService {
115120
DependencyScanningFilesystemSharedCache SharedCache;
116121
/// The global module cache entries.
117122
ModuleCacheEntries ModCacheEntries;
123+
/// The build session timestamp.
124+
std::time_t BuildSessionTimestamp;
118125
};
119126

120127
} // end namespace dependencies

clang/lib/Serialization/ASTReader.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3102,9 +3102,6 @@ ASTReader::ReadControlBlock(ModuleFile &F,
31023102
// files.
31033103

31043104
unsigned N = ValidateSystemInputs ? NumInputs : NumUserInputs;
3105-
// FIXME: F.InputFilesValidationTimestamp comes from std::chrono, but
3106-
// HSOpts.BuildSessionTimestamp comes from the FS. They may not be
3107-
// comparable.
31083105
if (HSOpts.ModulesValidateOncePerBuildSession &&
31093106
F.InputFilesValidationTimestamp > HSOpts.BuildSessionTimestamp &&
31103107
F.Kind == MK_ImplicitModule)
@@ -4935,9 +4932,6 @@ ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type,
49354932
// timestamp files are up-to-date in this build session.
49364933
for (unsigned I = 0, N = Loaded.size(); I != N; ++I) {
49374934
ImportedModule &M = Loaded[I];
4938-
// FIXME: F.InputFilesValidationTimestamp comes from std::chrono, but
4939-
// HSOpts.BuildSessionTimestamp comes from the FS. They may not be
4940-
// comparable.
49414935
if (M.Mod->Kind == MK_ImplicitModule &&
49424936
M.Mod->InputFilesValidationTimestamp < HSOpts.BuildSessionTimestamp)
49434937
getModuleManager().getModuleCache().updateModuleTimestamp(

clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ using namespace dependencies;
1414

1515
DependencyScanningService::DependencyScanningService(
1616
ScanningMode Mode, ScanningOutputFormat Format,
17-
ScanningOptimizations OptimizeArgs, bool EagerLoadModules, bool TraceVFS)
17+
ScanningOptimizations OptimizeArgs, bool EagerLoadModules, bool TraceVFS,
18+
std::time_t BuildSessionTimestamp)
1819
: Mode(Mode), Format(Format), OptimizeArgs(OptimizeArgs),
19-
EagerLoadModules(EagerLoadModules), TraceVFS(TraceVFS) {}
20+
EagerLoadModules(EagerLoadModules), TraceVFS(TraceVFS),
21+
BuildSessionTimestamp(BuildSessionTimestamp) {}

clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,10 @@ class DependencyScanningAction : public tooling::ToolAction {
428428
ScanInstance.getPreprocessorOpts().AllowPCHWithDifferentModulesCachePath =
429429
true;
430430

431+
if (ScanInstance.getHeaderSearchOpts().ModulesValidateOncePerBuildSession)
432+
ScanInstance.getHeaderSearchOpts().BuildSessionTimestamp =
433+
Service.getBuildSessionTimestamp();
434+
431435
ScanInstance.getFrontendOpts().GenerateGlobalModuleIndex = false;
432436
ScanInstance.getFrontendOpts().UseGlobalModuleIndex = false;
433437
// This will prevent us compiling individual modules asynchronously since

0 commit comments

Comments
 (0)