summaryrefslogtreecommitdiffstats
path: root/clang/tools/CIndex/CIndexCodeCompletion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/tools/CIndex/CIndexCodeCompletion.cpp')
-rw-r--r--clang/tools/CIndex/CIndexCodeCompletion.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/tools/CIndex/CIndexCodeCompletion.cpp b/clang/tools/CIndex/CIndexCodeCompletion.cpp
index 08510f2e557..b646474c814 100644
--- a/clang/tools/CIndex/CIndexCodeCompletion.cpp
+++ b/clang/tools/CIndex/CIndexCodeCompletion.cpp
@@ -195,6 +195,10 @@ struct AllocatedCXCodeCompleteResults : public CXCodeCompleteResults {
/// \brief File manager, used for diagnostics.
FileManager FileMgr;
+
+ /// \brief Temporary files that should be removed once we have finished
+ /// with the code-completion results.
+ std::vector<llvm::sys::Path> TemporaryFiles;
};
AllocatedCXCodeCompleteResults::AllocatedCXCodeCompleteResults()
@@ -205,6 +209,9 @@ AllocatedCXCodeCompleteResults::~AllocatedCXCodeCompleteResults() {
delete (CodeCompletionString *)Results[I].CompletionString;
delete [] Results;
delete Buffer;
+
+ for (unsigned I = 0, N = TemporaryFiles.size(); I != N; ++I)
+ TemporaryFiles[I].eraseFromDisk();
}
CXCodeCompleteResults *clang_codeComplete(CXIndex CIdx,
@@ -369,8 +376,9 @@ CXCodeCompleteResults *clang_codeComplete(CXIndex CIdx,
Results->FileMgr, Results->SourceMgr,
Results->Diagnostics);
- for (unsigned i = 0, e = TemporaryFiles.size(); i != e; ++i)
- TemporaryFiles[i].eraseFromDisk();
+ // Make sure we delete temporary files when the code-completion results are
+ // destroyed.
+ Results->TemporaryFiles.swap(TemporaryFiles);
return Results;
}
OpenPOWER on IntegriCloud