From 82abc1025dcb09a46098da3eb8385b95006f73ea Mon Sep 17 00:00:00 2001
From: Rafael Espindola <rafael.espindola@gmail.com>
Date: Tue, 19 Aug 2014 04:04:30 +0000
Subject: [PATCH] Update for llvm api change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215968 91177308-0d34-0410-b5e6-96231b3b80d8
---
 examples/clang-interpreter/main.cpp   | 28 ++++++++++++++-------------
 include/clang/CodeGen/CodeGenAction.h |  6 +++---
 lib/CodeGen/CodeGenAction.cpp         |  2 --
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/examples/clang-interpreter/main.cpp b/examples/clang-interpreter/main.cpp
index 25b9825a266..5cc5d524f19 100644
--- a/examples/clang-interpreter/main.cpp
+++ b/examples/clang-interpreter/main.cpp
@@ -42,27 +42,29 @@ std::string GetExecutablePath(const char *Argv0) {
   return llvm::sys::fs::getMainExecutable(Argv0, MainAddr);
 }
 
-static llvm::ExecutionEngine *createExecutionEngine(llvm::Module *M,
-                                                    std::string *ErrorStr) {
-  llvm::EngineBuilder EB = llvm::EngineBuilder(M)
-                               .setUseMCJIT(true)
-                               .setEngineKind(llvm::EngineKind::Either)
-                               .setErrorStr(ErrorStr);
-  return EB.create();
+static llvm::ExecutionEngine *
+createExecutionEngine(std::unique_ptr<llvm::Module> M, std::string *ErrorStr) {
+  return llvm::EngineBuilder(std::move(M))
+      .setUseMCJIT(true)
+      .setEngineKind(llvm::EngineKind::Either)
+      .setErrorStr(ErrorStr)
+      .create();
 }
 
-static int Execute(llvm::Module *Mod, char * const *envp) {
+static int Execute(std::unique_ptr<llvm::Module> Mod, char *const *envp) {
   llvm::InitializeNativeTarget();
   llvm::InitializeNativeTargetAsmPrinter();
 
+  llvm::Module &M = *Mod;
   std::string Error;
-  std::unique_ptr<llvm::ExecutionEngine> EE(createExecutionEngine(Mod, &Error));
+  std::unique_ptr<llvm::ExecutionEngine> EE(
+      createExecutionEngine(std::move(Mod), &Error));
   if (!EE) {
     llvm::errs() << "unable to make execution engine: " << Error << "\n";
     return 255;
   }
 
-  llvm::Function *EntryFn = Mod->getFunction("main");
+  llvm::Function *EntryFn = M.getFunction("main");
   if (!EntryFn) {
     llvm::errs() << "'main' function not found in module.\n";
     return 255;
@@ -70,7 +72,7 @@ static int Execute(llvm::Module *Mod, char * const *envp) {
 
   // FIXME: Support passing arguments.
   std::vector<std::string> Args;
-  Args.push_back(Mod->getModuleIdentifier());
+  Args.push_back(M.getModuleIdentifier());
 
   EE->finalizeObject();
   return EE->runFunctionAsMain(EntryFn, Args, envp);
@@ -163,8 +165,8 @@ int main(int argc, const char **argv, char * const *envp) {
     return 1;
 
   int Res = 255;
-  if (llvm::Module *Module = Act->takeModule())
-    Res = Execute(Module, envp);
+  if (std::unique_ptr<llvm::Module> &Module = Act->getModule())
+    Res = Execute(std::move(Module), envp);
 
   // Shutdown.
 
diff --git a/include/clang/CodeGen/CodeGenAction.h b/include/clang/CodeGen/CodeGenAction.h
index ba9b92da02c..282202184b6 100644
--- a/include/clang/CodeGen/CodeGenAction.h
+++ b/include/clang/CodeGen/CodeGenAction.h
@@ -52,9 +52,9 @@ public:
   /// the action will load it from the specified file.
   void setLinkModule(llvm::Module *Mod) { LinkModule = Mod; }
 
-  /// takeModule - Take the generated LLVM module, for use after the action has
-  /// been run. The result may be null on failure.
-  llvm::Module *takeModule();
+  /// Take the generated LLVM module, for use after the action has been run.
+  /// The result may be null on failure.
+  std::unique_ptr<llvm::Module> &getModule() { return TheModule; }
 
   /// Take the LLVM context used by this action.
   llvm::LLVMContext *takeLLVMContext();
diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp
index 407b92b27c0..ab0ca18a3de 100644
--- a/lib/CodeGen/CodeGenAction.cpp
+++ b/lib/CodeGen/CodeGenAction.cpp
@@ -579,8 +579,6 @@ void CodeGenAction::EndSourceFileAction() {
   TheModule.reset(BEConsumer->takeModule());
 }
 
-llvm::Module *CodeGenAction::takeModule() { return TheModule.release(); }
-
 llvm::LLVMContext *CodeGenAction::takeLLVMContext() {
   OwnsVMContext = false;
   return VMContext;
-- 
GitLab