Prechádzať zdrojové kódy

Convert these functions to use ErrorOr.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212341 91177308-0d34-0410-b5e6-96231b3b80d8
Rafael Espindola 11 rokov pred
rodič
commit
2d1f275c99

+ 9 - 8
lib/Bitcode/Reader/BitcodeReader.cpp

@@ -2116,12 +2116,13 @@ std::error_code BitcodeReader::ParseBitcodeInto(Module *M) {
   }
   }
 }
 }
 
 
-std::error_code BitcodeReader::ParseModuleTriple(std::string &Triple) {
+ErrorOr<std::string> BitcodeReader::parseModuleTriple() {
   if (Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
   if (Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
     return Error(InvalidRecord);
     return Error(InvalidRecord);
 
 
   SmallVector<uint64_t, 64> Record;
   SmallVector<uint64_t, 64> Record;
 
 
+  std::string Triple;
   // Read all the records for this module.
   // Read all the records for this module.
   while (1) {
   while (1) {
     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
@@ -2150,9 +2151,10 @@ std::error_code BitcodeReader::ParseModuleTriple(std::string &Triple) {
     }
     }
     Record.clear();
     Record.clear();
   }
   }
+  return Triple;
 }
 }
 
 
-std::error_code BitcodeReader::ParseTriple(std::string &Triple) {
+ErrorOr<std::string> BitcodeReader::parseTriple() {
   if (std::error_code EC = InitStream())
   if (std::error_code EC = InitStream())
     return EC;
     return EC;
 
 
@@ -2178,7 +2180,7 @@ std::error_code BitcodeReader::ParseTriple(std::string &Triple) {
 
 
     case BitstreamEntry::SubBlock:
     case BitstreamEntry::SubBlock:
       if (Entry.ID == bitc::MODULE_BLOCK_ID)
       if (Entry.ID == bitc::MODULE_BLOCK_ID)
-        return ParseModuleTriple(Triple);
+        return parseModuleTriple();
 
 
       // Ignore other sub-blocks.
       // Ignore other sub-blocks.
       if (Stream.SkipBlock())
       if (Stream.SkipBlock())
@@ -3470,11 +3472,10 @@ ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
 std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
 std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
                                          LLVMContext &Context) {
                                          LLVMContext &Context) {
   BitcodeReader *R = new BitcodeReader(Buffer, Context);
   BitcodeReader *R = new BitcodeReader(Buffer, Context);
-
-  std::string Triple("");
-  R->ParseTriple(Triple);
-
+  ErrorOr<std::string> Triple = R->parseTriple();
   R->releaseBuffer();
   R->releaseBuffer();
   delete R;
   delete R;
-  return Triple;
+  if (Triple.getError())
+    return "";
+  return Triple.get();
 }
 }

+ 2 - 2
lib/Bitcode/Reader/BitcodeReader.h

@@ -252,7 +252,7 @@ public:
 
 
   /// @brief Cheap mechanism to just extract module triple
   /// @brief Cheap mechanism to just extract module triple
   /// @returns true if an error occurred.
   /// @returns true if an error occurred.
-  std::error_code ParseTriple(std::string &Triple);
+  ErrorOr<std::string> parseTriple();
 
 
   static uint64_t decodeSignRotatedValue(uint64_t V);
   static uint64_t decodeSignRotatedValue(uint64_t V);
 
 
@@ -354,7 +354,7 @@ private:
   std::error_code ResolveGlobalAndAliasInits();
   std::error_code ResolveGlobalAndAliasInits();
   std::error_code ParseMetadata();
   std::error_code ParseMetadata();
   std::error_code ParseMetadataAttachment();
   std::error_code ParseMetadataAttachment();
-  std::error_code ParseModuleTriple(std::string &Triple);
+  ErrorOr<std::string> parseModuleTriple();
   std::error_code ParseUseLists();
   std::error_code ParseUseLists();
   std::error_code InitStream();
   std::error_code InitStream();
   std::error_code InitStreamFromBuffer();
   std::error_code InitStreamFromBuffer();