Skip to content

Commit df4048c

Browse files
author
David Ungar
committed
Clarify ownership of DepTracker.
1 parent 2134641 commit df4048c

File tree

3 files changed

+12
-20
lines changed

3 files changed

+12
-20
lines changed

include/swift/Frontend/Frontend.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,8 @@ class CompilerInstance {
336336
std::unique_ptr<ASTContext> Context;
337337
std::unique_ptr<SILModule> TheSILModule;
338338

339-
DependencyTracker *DepTracker = nullptr;
339+
/// Null if no tracker.
340+
std::unique_ptr<DependencyTracker> DepTracker;
340341

341342
ModuleDecl *MainModule = nullptr;
342343
SerializedModuleLoader *SML = nullptr;
@@ -408,13 +409,11 @@ class CompilerInstance {
408409
Diagnostics.addConsumer(*DC);
409410
}
410411

411-
void setDependencyTracker(DependencyTracker *DT) {
412+
void createDependencyTracker() {
412413
assert(!Context && "must be called before setup()");
413-
DepTracker = DT;
414-
}
415-
DependencyTracker *getDependencyTracker() {
416-
return DepTracker;
414+
DepTracker = llvm::make_unique<DependencyTracker>();
417415
}
416+
DependencyTracker *getDependencyTracker() { return DepTracker.get(); }
418417

419418
/// Set the SIL module for this compilation instance.
420419
///

lib/Frontend/Frontend.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ bool CompilerInstance::setUpModuleLoaders() {
197197
Context->addModuleLoader(SourceLoader::create(*Context,
198198
!immediate,
199199
enableResilience,
200-
DepTracker));
200+
getDependencyTracker()));
201201
}
202202
{
203-
auto SML = SerializedModuleLoader::create(*Context, DepTracker);
203+
auto SML = SerializedModuleLoader::create(*Context, getDependencyTracker());
204204
this->SML = SML.get();
205205
Context->addModuleLoader(std::move(SML));
206206
}
@@ -210,7 +210,7 @@ bool CompilerInstance::setUpModuleLoaders() {
210210
// knowledge.
211211
auto clangImporter =
212212
ClangImporter::create(*Context, Invocation.getClangImporterOptions(),
213-
Invocation.getPCHHash(), DepTracker);
213+
Invocation.getPCHHash(), getDependencyTracker());
214214
if (!clangImporter) {
215215
Diagnostics.diagnose(SourceLoc(), diag::error_clang_importer_create_fail);
216216
return true;

lib/FrontendTool/FrontendTool.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1756,17 +1756,10 @@ int swift::performFrontend(ArrayRef<const char *> Args,
17561756
enableDiagnosticVerifier(Instance->getSourceMgr());
17571757
}
17581758

1759-
// Do not move into the following block. Even though it appears to not be
1760-
// referenced, depTracker must live as long as this activation record.
1761-
DependencyTracker depTracker;
1762-
{
1763-
const FrontendInputsAndOutputs &io =
1764-
Invocation.getFrontendOptions().InputsAndOutputs;
1765-
if (io.hasDependencyTrackerPath() ||
1766-
!Invocation.getFrontendOptions().IndexStorePath.empty()) {
1767-
Instance->setDependencyTracker(&depTracker);
1768-
}
1769-
}
1759+
if (Invocation.getFrontendOptions()
1760+
.InputsAndOutputs.hasDependencyTrackerPath() ||
1761+
!Invocation.getFrontendOptions().IndexStorePath.empty())
1762+
Instance->createDependencyTracker();
17701763

17711764
if (Instance->setup(Invocation)) {
17721765
return finishDiagProcessing(1);

0 commit comments

Comments
 (0)