Pass a std::uinque_ptr to ParseAssembly to make the ownership explicit. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Sun, 17 Aug 2014 21:36:47 +0000 (21:36 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sun, 17 Aug 2014 21:36:47 +0000 (21:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215852 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/AsmParser/Parser.h
lib/AsmParser/Parser.cpp
lib/IRReader/IRReader.cpp

index 165c46d6f27106ca9a30977b52d3e50647ec819e..5a75308c770daa5d9976508109788cad0b29a6aa 100644 (file)
@@ -14,6 +14,7 @@
 #ifndef LLVM_ASMPARSER_PARSER_H
 #define LLVM_ASMPARSER_PARSER_H
 
+#include <memory>
 #include <string>
 
 namespace llvm {
@@ -50,14 +51,12 @@ Module *ParseAssemblyString(
 
 /// This function is the low-level interface to the LLVM Assembly Parser.
 /// ParseAssemblyFile and ParseAssemblyString are wrappers around this function.
-/// @brief Parse LLVM Assembly from a MemoryBuffer. This function *always*
-/// takes ownership of the MemoryBuffer.
+/// @brief Parse LLVM Assembly from a MemoryBuffer.
 Module *ParseAssembly(
-    MemoryBuffer *F,     ///< The MemoryBuffer containing assembly
-    Module *M,           ///< A module to add the assembly too.
-    SMDiagnostic &Err,   ///< Error result info.
-    LLVMContext &Context
-);
+    std::unique_ptr<MemoryBuffer> F, ///< The MemoryBuffer containing assembly
+    Module *M,                       ///< A module to add the assembly too.
+    SMDiagnostic &Err,               ///< Error result info.
+    LLVMContext &Context);
 
 } // End llvm namespace
 
index 91bb51c2422486cc711f2990e5bec151f2265bbb..4cc94cb270d9af3cd2ef738671b3f5673a1e6093 100644 (file)
 #include <system_error>
 using namespace llvm;
 
-Module *llvm::ParseAssembly(MemoryBuffer *F,
-                            Module *M,
-                            SMDiagnostic &Err,
-                            LLVMContext &Context) {
+Module *llvm::ParseAssembly(std::unique_ptr<MemoryBuffer> F, Module *M,
+                            SMDiagnostic &Err, LLVMContext &Context) {
   SourceMgr SM;
-  SM.AddNewSourceBuffer(F, SMLoc());
+  MemoryBuffer *Buf = F.get();
+  SM.AddNewSourceBuffer(F.release(), SMLoc());
 
   // If we are parsing into an existing module, do it.
   if (M)
-    return LLParser(F, SM, Err, M).Run() ? nullptr : M;
+    return LLParser(Buf, SM, Err, M).Run() ? nullptr : M;
 
   // Otherwise create a new module.
-  std::unique_ptr<Module> M2(new Module(F->getBufferIdentifier(), Context));
-  if (LLParser(F, SM, Err, M2.get()).Run())
+  std::unique_ptr<Module> M2(new Module(Buf->getBufferIdentifier(), Context));
+  if (LLParser(Buf, SM, Err, M2.get()).Run())
     return nullptr;
   return M2.release();
 }
@@ -49,7 +48,7 @@ Module *llvm::ParseAssemblyFile(const std::string &Filename, SMDiagnostic &Err,
     return nullptr;
   }
 
-  return ParseAssembly(FileOrErr.get().release(), nullptr, Err, Context);
+  return ParseAssembly(std::move(FileOrErr.get()), nullptr, Err, Context);
 }
 
 Module *llvm::ParseAssemblyString(const char *AsmString, Module *M,
@@ -57,5 +56,5 @@ Module *llvm::ParseAssemblyString(const char *AsmString, Module *M,
   MemoryBuffer *F =
       MemoryBuffer::getMemBuffer(StringRef(AsmString), "<string>");
 
-  return ParseAssembly(F, M, Err, Context);
+  return ParseAssembly(std::unique_ptr<MemoryBuffer>(F), M, Err, Context);
 }
index 5675e03585e541d8e9df13dad4427df0f974d2ff..aa7312ac04117ce9984105be9a2d86fce30616d5 100644 (file)
@@ -45,7 +45,7 @@ static Module *getLazyIRModule(std::unique_ptr<MemoryBuffer> Buffer,
     return ModuleOrErr.get();
   }
 
-  return ParseAssembly(Buffer.release(), nullptr, Err, Context);
+  return ParseAssembly(std::move(Buffer), nullptr, Err, Context);
 }
 
 Module *llvm::getLazyIRFileModule(const std::string &Filename,
@@ -78,8 +78,8 @@ Module *llvm::ParseIR(MemoryBuffer *Buffer, SMDiagnostic &Err,
     return M;
   }
 
-  return ParseAssembly(MemoryBuffer::getMemBuffer(
-                           Buffer->getBuffer(), Buffer->getBufferIdentifier()),
+  return ParseAssembly(std::unique_ptr<MemoryBuffer>(MemoryBuffer::getMemBuffer(
+                           Buffer->getBuffer(), Buffer->getBufferIdentifier())),
                        nullptr, Err, Context);
 }