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();
