From: Daniel Dunbar Date: Tue, 16 Feb 2010 01:54:54 +0000 (+0000) Subject: ASTUnit::LoadFromCompilerInvocation - Take ownership of the provided invocation. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7acc37450d59ef751df73acb91de73850cc6517;p=clang ASTUnit::LoadFromCompilerInvocation - Take ownership of the provided invocation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96315 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/ASTUnit.h b/include/clang/Frontend/ASTUnit.h index 7aeabe57ac..56bc133afc 100644 --- a/include/clang/Frontend/ASTUnit.h +++ b/include/clang/Frontend/ASTUnit.h @@ -143,15 +143,14 @@ public: /// CompilerInvocation object. /// /// \param CI - The compiler invocation to use; it must have exactly one input - /// source file. The caller is responsible for ensuring the lifetime of the - /// invocation extends past that of the returned ASTUnit. + /// source file. The ASTUnit takes ownership of the CompilerInvocation object. /// /// \param Diags - The diagnostics engine to use for reporting errors; its /// lifetime is expected to extend past that of the returned ASTUnit. // // FIXME: Move OnlyLocalDecls, UseBumpAllocator to setters on the ASTUnit, we // shouldn't need to specify them at construction time. - static ASTUnit *LoadFromCompilerInvocation(const CompilerInvocation &CI, + static ASTUnit *LoadFromCompilerInvocation(CompilerInvocation *CI, Diagnostic &Diags, bool OnlyLocalDecls = false); diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index 7f1e722f32..845b4cd5a6 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -230,7 +230,7 @@ public: } -ASTUnit *ASTUnit::LoadFromCompilerInvocation(const CompilerInvocation &CI, +ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI, Diagnostic &Diags, bool OnlyLocalDecls) { // Create the compiler instance to use for building the AST. @@ -238,7 +238,7 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocation(const CompilerInvocation &CI, llvm::OwningPtr AST; llvm::OwningPtr Act; - Clang.setInvocation(const_cast(&CI)); + Clang.setInvocation(CI); Clang.setDiagnostics(&Diags); Clang.setDiagnosticClient(Diags.getClient()); @@ -296,6 +296,7 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocation(const CompilerInvocation &CI, Clang.takeDiagnostics(); Clang.takeInvocation(); + AST->Invocation.reset(Clang.takeInvocation()); return AST.take(); error: @@ -364,9 +365,5 @@ ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin, CI->getHeaderSearchOpts().ResourceDir = ResourceFilesPath; CI->getFrontendOpts().DisableFree = UseBumpAllocator; - ASTUnit *Unit = LoadFromCompilerInvocation(*CI, Diags, OnlyLocalDecls); - if (Unit) - Unit->Invocation.reset(CI.take()); - - return Unit; + return LoadFromCompilerInvocation(CI.take(), Diags, OnlyLocalDecls); }