summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2017-01-06 19:49:01 +0000
committerDavid Blaikie <dblaikie@gmail.com>2017-01-06 19:49:01 +0000
commite781b71dd0fa9835aff199285aba0f83d47aed27 (patch)
tree746c15203e97a6e9bf75f556dea4fd5608c7fdcc /tools
parent8dc751fddfd5052e23e51170699fb2bf2d242550 (diff)
Reapply "IntrusiveRefCntPtr -> std::shared_ptr for CompilerInvocationBase and CodeCompleteConsumer"
Aleksey Shlypanikov pointed out my mistake in migrating an explicit unique_ptr to auto - I was expecting the function returned a unique_ptr, but instead it returned a raw pointer - introducing a leak. Thanks Aleksey! This reapplies r291184, reverted in r291249. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291270 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/c-index-test/core_main.cpp5
-rw-r--r--tools/clang-import-test/clang-import-test.cpp2
-rw-r--r--tools/diagtool/ShowEnabledWarnings.cpp4
-rw-r--r--tools/libclang/CIndex.cpp9
-rw-r--r--tools/libclang/CIndexCodeCompletion.cpp19
-rw-r--r--tools/libclang/CXTranslationUnit.h3
-rw-r--r--tools/libclang/Indexing.cpp29
7 files changed, 37 insertions, 34 deletions
diff --git a/tools/c-index-test/core_main.cpp b/tools/c-index-test/core_main.cpp
index 3e4052c93e..8976d91349 100644
--- a/tools/c-index-test/core_main.cpp
+++ b/tools/c-index-test/core_main.cpp
@@ -140,8 +140,7 @@ static bool printSourceSymbols(ArrayRef<const char *> Args) {
ArgsWithProgName.append(Args.begin(), Args.end());
IntrusiveRefCntPtr<DiagnosticsEngine>
Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions));
- IntrusiveRefCntPtr<CompilerInvocation>
- CInvok(createInvocationFromCommandLine(ArgsWithProgName, Diags));
+ auto CInvok = createInvocationFromCommandLine(ArgsWithProgName, Diags);
if (!CInvok)
return true;
@@ -153,7 +152,7 @@ static bool printSourceSymbols(ArrayRef<const char *> Args) {
auto PCHContainerOps = std::make_shared<PCHContainerOperations>();
std::unique_ptr<ASTUnit> Unit(ASTUnit::LoadFromCompilerInvocationAction(
- CInvok.get(), PCHContainerOps, Diags, IndexAction.get()));
+ std::move(CInvok), PCHContainerOps, Diags, IndexAction.get()));
if (!Unit)
return true;
diff --git a/tools/clang-import-test/clang-import-test.cpp b/tools/clang-import-test/clang-import-test.cpp
index 47598fc918..33190af4bf 100644
--- a/tools/clang-import-test/clang-import-test.cpp
+++ b/tools/clang-import-test/clang-import-test.cpp
@@ -157,7 +157,7 @@ BuildCompilerInstance(ArrayRef<const char *> ClangArgv) {
Inv->getCodeGenOpts().setDebugInfo(codegenoptions::FullDebugInfo);
Inv->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple();
- Ins->setInvocation(Inv.release());
+ Ins->setInvocation(std::move(Inv));
TargetInfo *TI = TargetInfo::CreateTargetInfo(
Ins->getDiagnostics(), Ins->getInvocation().TargetOpts);
diff --git a/tools/diagtool/ShowEnabledWarnings.cpp b/tools/diagtool/ShowEnabledWarnings.cpp
index abbd3afbd5..e6ea786a9a 100644
--- a/tools/diagtool/ShowEnabledWarnings.cpp
+++ b/tools/diagtool/ShowEnabledWarnings.cpp
@@ -67,8 +67,8 @@ createDiagnostics(unsigned int argc, char **argv) {
SmallVector<const char *, 4> Args;
Args.push_back("diagtool");
Args.append(argv, argv + argc);
- std::unique_ptr<CompilerInvocation> Invocation(
- createInvocationFromCommandLine(Args, InterimDiags));
+ std::unique_ptr<CompilerInvocation> Invocation =
+ createInvocationFromCommandLine(Args, InterimDiags);
if (!Invocation)
return nullptr;
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 40eea39f3b..9cdb2ee8d6 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -68,13 +68,14 @@ using namespace clang::cxcursor;
using namespace clang::cxtu;
using namespace clang::cxindex;
-CXTranslationUnit cxtu::MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *AU) {
+CXTranslationUnit cxtu::MakeCXTranslationUnit(CIndexer *CIdx,
+ std::unique_ptr<ASTUnit> AU) {
if (!AU)
return nullptr;
assert(CIdx);
CXTranslationUnit D = new CXTranslationUnitImpl();
D->CIdx = CIdx;
- D->TheASTUnit = AU;
+ D->TheASTUnit = AU.release();
D->StringPool = new cxstring::CXStringPool();
D->Diagnostics = nullptr;
D->OverridenCursorsPool = createOverridenCXCursorsPool();
@@ -3231,7 +3232,7 @@ enum CXErrorCode clang_createTranslationUnit2(CXIndex CIdx,
/*CaptureDiagnostics=*/true,
/*AllowPCHWithCompilerErrors=*/true,
/*UserFilesAreVolatile=*/true);
- *out_TU = MakeCXTranslationUnit(CXXIdx, AU.release());
+ *out_TU = MakeCXTranslationUnit(CXXIdx, std::move(AU));
return *out_TU ? CXError_Success : CXError_Failure;
}
@@ -3383,7 +3384,7 @@ clang_parseTranslationUnit_Impl(CXIndex CIdx, const char *source_filename,
if (isASTReadError(Unit ? Unit.get() : ErrUnit.get()))
return CXError_ASTReadError;
- *out_TU = MakeCXTranslationUnit(CXXIdx, Unit.release());
+ *out_TU = MakeCXTranslationUnit(CXXIdx, std::move(Unit));
return *out_TU ? CXError_Success : CXError_Failure;
}
diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp
index 12895c4a9b..ca68bc1cd2 100644
--- a/tools/libclang/CIndexCodeCompletion.cpp
+++ b/tools/libclang/CIndexCodeCompletion.cpp
@@ -279,13 +279,12 @@ struct AllocatedCXCodeCompleteResults : public CXCodeCompleteResults {
SmallVector<const llvm::MemoryBuffer *, 1> TemporaryBuffers;
/// \brief Allocator used to store globally cached code-completion results.
- IntrusiveRefCntPtr<clang::GlobalCodeCompletionAllocator>
- CachedCompletionAllocator;
-
+ std::shared_ptr<clang::GlobalCodeCompletionAllocator>
+ CachedCompletionAllocator;
+
/// \brief Allocator used to store code completion results.
- IntrusiveRefCntPtr<clang::GlobalCodeCompletionAllocator>
- CodeCompletionAllocator;
-
+ std::shared_ptr<clang::GlobalCodeCompletionAllocator> CodeCompletionAllocator;
+
/// \brief Context under which completion occurred.
enum clang::CodeCompletionContext::Kind ContextKind;
@@ -315,15 +314,15 @@ struct AllocatedCXCodeCompleteResults : public CXCodeCompleteResults {
///
/// Used for debugging purposes only.
static std::atomic<unsigned> CodeCompletionResultObjects;
-
+
AllocatedCXCodeCompleteResults::AllocatedCXCodeCompleteResults(
IntrusiveRefCntPtr<FileManager> FileMgr)
- : CXCodeCompleteResults(),
- DiagOpts(new DiagnosticOptions),
+ : CXCodeCompleteResults(), DiagOpts(new DiagnosticOptions),
Diag(new DiagnosticsEngine(
IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs), &*DiagOpts)),
FileMgr(FileMgr), SourceMgr(new SourceManager(*Diag, *FileMgr)),
- CodeCompletionAllocator(new clang::GlobalCodeCompletionAllocator),
+ CodeCompletionAllocator(
+ std::make_shared<clang::GlobalCodeCompletionAllocator>()),
Contexts(CXCompletionContext_Unknown),
ContainerKind(CXCursor_InvalidCode), ContainerIsIncomplete(1) {
if (getenv("LIBCLANG_OBJTRACKING"))
diff --git a/tools/libclang/CXTranslationUnit.h b/tools/libclang/CXTranslationUnit.h
index 6022c9dab1..67c31d2dba 100644
--- a/tools/libclang/CXTranslationUnit.h
+++ b/tools/libclang/CXTranslationUnit.h
@@ -38,7 +38,8 @@ struct CXTranslationUnitImpl {
namespace clang {
namespace cxtu {
-CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *AU);
+CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx,
+ std::unique_ptr<ASTUnit> AU);
static inline ASTUnit *getASTUnit(CXTranslationUnit TU) {
if (!TU)
diff --git a/tools/libclang/Indexing.cpp b/tools/libclang/Indexing.cpp
index 5422dd3dc6..f98b258879 100644
--- a/tools/libclang/Indexing.cpp
+++ b/tools/libclang/Indexing.cpp
@@ -476,17 +476,19 @@ static CXErrorCode clang_indexSourceFile_Impl(
// present it will be unused.
if (source_filename)
Args->push_back(source_filename);
-
- IntrusiveRefCntPtr<CompilerInvocation>
- CInvok(createInvocationFromCommandLine(*Args, Diags));
+
+ std::shared_ptr<CompilerInvocation> CInvok =
+ createInvocationFromCommandLine(*Args, Diags);
if (!CInvok)
return CXError_Failure;
// Recover resources if we crash before exiting this function.
- llvm::CrashRecoveryContextCleanupRegistrar<CompilerInvocation,
- llvm::CrashRecoveryContextReleaseRefCleanup<CompilerInvocation> >
- CInvokCleanup(CInvok.get());
+ llvm::CrashRecoveryContextCleanupRegistrar<
+ std::shared_ptr<CompilerInvocation>,
+ llvm::CrashRecoveryContextDestructorCleanup<
+ std::shared_ptr<CompilerInvocation>>>
+ CInvokCleanup(&CInvok);
if (CInvok->getFrontendOpts().Inputs.empty())
return CXError_Failure;
@@ -518,13 +520,14 @@ static CXErrorCode clang_indexSourceFile_Impl(
CInvok->getHeaderSearchOpts().ModuleFormat =
CXXIdx->getPCHContainerOperations()->getRawReader().getFormat();
- ASTUnit *Unit = ASTUnit::create(CInvok.get(), Diags, CaptureDiagnostics,
- /*UserFilesAreVolatile=*/true);
+ auto Unit = ASTUnit::create(CInvok, Diags, CaptureDiagnostics,
+ /*UserFilesAreVolatile=*/true);
if (!Unit)
return CXError_InvalidArguments;
+ auto *UPtr = Unit.get();
std::unique_ptr<CXTUOwner> CXTU(
- new CXTUOwner(MakeCXTranslationUnit(CXXIdx, Unit)));
+ new CXTUOwner(MakeCXTranslationUnit(CXXIdx, std::move(Unit))));
// Recover resources if we crash before exiting this method.
llvm::CrashRecoveryContextCleanupRegistrar<CXTUOwner>
@@ -583,16 +586,16 @@ static CXErrorCode clang_indexSourceFile_Impl(
!PrecompilePreamble ? 0 : 2 - CreatePreambleOnFirstParse;
DiagnosticErrorTrap DiagTrap(*Diags);
bool Success = ASTUnit::LoadFromCompilerInvocationAction(
- CInvok.get(), CXXIdx->getPCHContainerOperations(), Diags,
- IndexAction.get(), Unit, Persistent, CXXIdx->getClangResourcesPath(),
+ std::move(CInvok), CXXIdx->getPCHContainerOperations(), Diags,
+ IndexAction.get(), UPtr, Persistent, CXXIdx->getClangResourcesPath(),
OnlyLocalDecls, CaptureDiagnostics, PrecompilePreambleAfterNParses,
CacheCodeCompletionResults,
/*IncludeBriefCommentsInCodeCompletion=*/false,
/*UserFilesAreVolatile=*/true);
if (DiagTrap.hasErrorOccurred() && CXXIdx->getDisplayDiagnostics())
- printDiagsToStderr(Unit);
+ printDiagsToStderr(UPtr);
- if (isASTReadError(Unit))
+ if (isASTReadError(UPtr))
return CXError_ASTReadError;
if (!Success)