Revert "Convert a few std::strings to StringRef."

This reverts commit r212342.

We can get a StringRef into the current Record, but not one in the bitcode
itself since the string is compressed in it.

llvm-svn: 212356
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 348234d..c02b587 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -71,15 +71,6 @@
   return false;
 }
 
-ErrorOr<StringRef> BitcodeReader::convertToStringRef(ArrayRef<uint64_t> Record,
-                                                     unsigned Idx) {
-  if (Idx > Record.size())
-    return Error(InvalidRecord);
-
-  return StringRef((char*)&Record[Idx], Record.size() - Idx);
-}
-
-
 static GlobalValue::LinkageTypes GetDecodedLinkage(unsigned Val) {
   switch (Val) {
   default: // Map unknown/new linkages to external
@@ -2125,13 +2116,13 @@
   }
 }
 
-ErrorOr<StringRef> BitcodeReader::parseModuleTriple() {
+ErrorOr<std::string> BitcodeReader::parseModuleTriple() {
   if (Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID))
     return Error(InvalidRecord);
 
   SmallVector<uint64_t, 64> Record;
 
-  StringRef Triple;
+  std::string Triple;
   // Read all the records for this module.
   while (1) {
     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
@@ -2151,10 +2142,10 @@
     switch (Stream.readRecord(Entry.ID, Record)) {
     default: break;  // Default behavior, ignore unknown content.
     case bitc::MODULE_CODE_TRIPLE: {  // TRIPLE: [strchr x N]
-      ErrorOr<StringRef> S = convertToStringRef(Record, 0);
-      if (std::error_code EC = S.getError())
-        return EC;
-      Triple = S.get();
+      std::string S;
+      if (ConvertToString(Record, 0, S))
+        return Error(InvalidRecord);
+      Triple = S;
       break;
     }
     }
@@ -2163,7 +2154,7 @@
   return Triple;
 }
 
-ErrorOr<StringRef> BitcodeReader::parseTriple() {
+ErrorOr<std::string> BitcodeReader::parseTriple() {
   if (std::error_code EC = InitStream())
     return EC;
 
@@ -3478,10 +3469,10 @@
   return M;
 }
 
-StringRef llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
-                                       LLVMContext &Context) {
+std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
+                                         LLVMContext &Context) {
   BitcodeReader *R = new BitcodeReader(Buffer, Context);
-  ErrorOr<StringRef> Triple = R->parseTriple();
+  ErrorOr<std::string> Triple = R->parseTriple();
   R->releaseBuffer();
   delete R;
   if (Triple.getError())
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.h b/llvm/lib/Bitcode/Reader/BitcodeReader.h
index e831ea5..1d4869a 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.h
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.h
@@ -196,9 +196,6 @@
 
   static const std::error_category &BitcodeErrorCategory();
 
-  static ErrorOr<StringRef> convertToStringRef(ArrayRef<uint64_t> Record,
-                                               unsigned Idx);
-
 public:
   enum ErrorType {
     BitcodeStreamInvalidSize,
@@ -223,7 +220,7 @@
     InvalidValue // Invalid version, inst number, attr number, etc
   };
 
-  static std::error_code Error(ErrorType E) {
+  std::error_code Error(ErrorType E) {
     return std::error_code(E, BitcodeErrorCategory());
   }
 
@@ -255,7 +252,7 @@
 
   /// @brief Cheap mechanism to just extract module triple
   /// @returns true if an error occurred.
-  ErrorOr<StringRef> parseTriple();
+  ErrorOr<std::string> parseTriple();
 
   static uint64_t decodeSignRotatedValue(uint64_t V);
 
@@ -357,7 +354,7 @@
   std::error_code ResolveGlobalAndAliasInits();
   std::error_code ParseMetadata();
   std::error_code ParseMetadataAttachment();
-  ErrorOr<StringRef> parseModuleTriple();
+  ErrorOr<std::string> parseModuleTriple();
   std::error_code ParseUseLists();
   std::error_code InitStream();
   std::error_code InitStreamFromBuffer();
diff --git a/llvm/lib/LTO/LTOModule.cpp b/llvm/lib/LTO/LTOModule.cpp
index 2fa450f..5b3057177 100644
--- a/llvm/lib/LTO/LTOModule.cpp
+++ b/llvm/lib/LTO/LTOModule.cpp
@@ -63,8 +63,8 @@
 
 bool LTOModule::isBitcodeForTarget(MemoryBuffer *buffer,
                                    StringRef triplePrefix) {
-  StringRef Triple = getBitcodeTargetTriple(buffer, getGlobalContext());
-  return Triple.startswith(triplePrefix);
+  std::string Triple = getBitcodeTargetTriple(buffer, getGlobalContext());
+  return StringRef(Triple).startswith(triplePrefix);
 }
 
 LTOModule *LTOModule::createFromFile(const char *path, TargetOptions options,