[llvm] r199279 - Make parseBitcodeFile return an ErrorOr<Module *>.

Rafael Espindola rafael.espindola at gmail.com
Tue Jan 14 17:08:24 PST 2014


Author: rafael
Date: Tue Jan 14 19:08:23 2014
New Revision: 199279

URL: http://llvm.org/viewvc/llvm-project?rev=199279&view=rev
Log:
Make parseBitcodeFile return an ErrorOr<Module *>.

Modified:
    llvm/trunk/include/llvm/Bitcode/ReaderWriter.h
    llvm/trunk/lib/Bitcode/Reader/BitReader.cpp
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/lib/IRReader/IRReader.cpp
    llvm/trunk/tools/llvm-nm/llvm-nm.cpp

Modified: llvm/trunk/include/llvm/Bitcode/ReaderWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/ReaderWriter.h?rev=199279&r1=199278&r2=199279&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Bitcode/ReaderWriter.h (original)
+++ llvm/trunk/include/llvm/Bitcode/ReaderWriter.h Tue Jan 14 19:08:23 2014
@@ -50,11 +50,10 @@ namespace llvm {
                                      LLVMContext &Context,
                                      std::string *ErrMsg = 0);
 
-  /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
-  /// If an error occurs, this returns null and fills in *ErrMsg if it is
-  /// non-null.  This method *never* takes ownership of Buffer.
-  Module *ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext &Context,
-                           std::string *ErrMsg = 0);
+  /// Read the specified bitcode file, returning the module.
+  /// This method *never* takes ownership of Buffer.
+  ErrorOr<Module *> parseBitcodeFile(MemoryBuffer *Buffer,
+                                     LLVMContext &Context);
 
   /// WriteBitcodeToFile - Write the specified module to the specified
   /// raw output stream.  For streams where it matters, the given stream

Modified: llvm/trunk/lib/Bitcode/Reader/BitReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitReader.cpp?rev=199279&r1=199278&r2=199279&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitReader.cpp Tue Jan 14 19:08:23 2014
@@ -30,16 +30,16 @@ LLVMBool LLVMParseBitcodeInContext(LLVMC
                                    LLVMMemoryBufferRef MemBuf,
                                    LLVMModuleRef *OutModule,
                                    char **OutMessage) {
-  std::string Message;
-
-  *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef),
-                                     &Message));
-  if (!*OutModule) {
+  ErrorOr<Module *> ModuleOrErr =
+      parseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef));
+  if (error_code EC = ModuleOrErr.getError()) {
     if (OutMessage)
-      *OutMessage = strdup(Message.c_str());
+      *OutMessage = strdup(EC.message().c_str());
+    *OutModule = wrap((Module*)0);
     return 1;
   }
 
+  *OutModule = wrap(ModuleOrErr.get());
   return 0;
 }
 

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=199279&r1=199278&r2=199279&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Tue Jan 14 19:08:23 2014
@@ -3342,16 +3342,11 @@ Module *llvm::getStreamedBitcodeModule(c
   return M;
 }
 
-/// ParseBitcodeFile - Read the specified bitcode file, returning the module.
-/// If an error occurs, return null and fill in *ErrMsg if non-null.
-Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context,
-                               std::string *ErrMsg){
+ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
+                                         LLVMContext &Context) {
   ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer, Context);
-  if (error_code EC = ModuleOrErr.getError()) {
-    if (ErrMsg)
-      *ErrMsg = EC.message();
-    return 0;
-  }
+  if (!ModuleOrErr)
+    return ModuleOrErr;
   Module *M = ModuleOrErr.get();
 
   // Don't let the BitcodeReader dtor delete 'Buffer', regardless of whether
@@ -3360,10 +3355,8 @@ Module *llvm::ParseBitcodeFile(MemoryBuf
 
   // Read in the entire module, and destroy the BitcodeReader.
   if (error_code EC = M->materializeAllPermanently()) {
-    if (ErrMsg)
-      *ErrMsg = EC.message();
     delete M;
-    return 0;
+    return EC;
   }
 
   // TODO: Restore the use-lists to the in-memory state when the bitcode was

Modified: llvm/trunk/lib/IRReader/IRReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IRReader/IRReader.cpp?rev=199279&r1=199278&r2=199279&view=diff
==============================================================================
--- llvm/trunk/lib/IRReader/IRReader.cpp (original)
+++ llvm/trunk/lib/IRReader/IRReader.cpp Tue Jan 14 19:08:23 2014
@@ -69,12 +69,14 @@ Module *llvm::ParseIR(MemoryBuffer *Buff
                      TimePassesIsEnabled);
   if (isBitcode((const unsigned char *)Buffer->getBufferStart(),
                 (const unsigned char *)Buffer->getBufferEnd())) {
-    std::string ErrMsg;
-    Module *M = ParseBitcodeFile(Buffer, Context, &ErrMsg);
-    if (M == 0)
+    ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(Buffer, Context);
+    Module *M = 0;
+    if (error_code EC = ModuleOrErr.getError())
       Err = SMDiagnostic(Buffer->getBufferIdentifier(), SourceMgr::DK_Error,
-                         ErrMsg);
-    // ParseBitcodeFile does not take ownership of the Buffer.
+                         EC.message());
+    else
+      M = ModuleOrErr.get();
+    // parseBitcodeFile does not take ownership of the Buffer.
     delete Buffer;
     return M;
   }

Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=199279&r1=199278&r2=199279&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
+++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Tue Jan 14 19:08:23 2014
@@ -570,16 +570,14 @@ static void DumpSymbolNamesFromFile(std:
   sys::fs::file_magic magic = sys::fs::identify_magic(Buffer->getBuffer());
 
   LLVMContext &Context = getGlobalContext();
-  std::string ErrorMessage;
   if (magic == sys::fs::file_magic::bitcode) {
-    Module *Result = 0;
-    Result = ParseBitcodeFile(Buffer.get(), Context, &ErrorMessage);
-    if (Result) {
+    ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(Buffer.get(), Context);
+    if (error(ModuleOrErr.getError(), Filename)) {
+      return;
+    } else {
+      Module *Result = ModuleOrErr.get();
       DumpSymbolNamesFromModule(Result);
       delete Result;
-    } else {
-      error(ErrorMessage, Filename);
-      return;
     }
   } else if (magic == sys::fs::file_magic::archive) {
     OwningPtr<Binary> arch;
@@ -616,11 +614,10 @@ static void DumpSymbolNamesFromFile(std:
           OwningPtr<MemoryBuffer> buff;
           if (error(i->getMemoryBuffer(buff)))
             return;
-          Module *Result = 0;
-          if (buff)
-            Result = ParseBitcodeFile(buff.get(), Context, &ErrorMessage);
 
-          if (Result) {
+          ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(buff.get(), Context);
+          if (ModuleOrErr) {
+            Module *Result = ModuleOrErr.get();
             DumpSymbolNamesFromModule(Result);
             delete Result;
           }





More information about the llvm-commits mailing list