summaryrefslogtreecommitdiff
path: root/tools/libclang/Indexing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/Indexing.cpp')
-rw-r--r--tools/libclang/Indexing.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/tools/libclang/Indexing.cpp b/tools/libclang/Indexing.cpp
index c18b5402aa715..f98b258879730 100644
--- a/tools/libclang/Indexing.cpp
+++ b/tools/libclang/Indexing.cpp
@@ -371,7 +371,7 @@ public:
DataConsumer->setASTContext(CI.getASTContext());
Preprocessor &PP = CI.getPreprocessor();
PP.addPPCallbacks(llvm::make_unique<IndexPPCallbacks>(PP, *DataConsumer));
- DataConsumer->setPreprocessor(PP);
+ DataConsumer->setPreprocessor(CI.getPreprocessorPtr());
if (SKData) {
auto *PPRec = new PPConditionalDirectiveRecord(PP.getSourceManager());
@@ -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)