From f98536a04638b2ba4662e11b12b29ea8d7e1aa25 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 4 Jul 2014 14:12:46 +0000 Subject: Convert a few std::strings to StringRef. llvm-svn: 212342 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index c02b587..348234d 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -71,6 +71,15 @@ static bool ConvertToString(ArrayRef Record, unsigned Idx, return false; } +ErrorOr BitcodeReader::convertToStringRef(ArrayRef 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 @@ -2116,13 +2125,13 @@ std::error_code BitcodeReader::ParseBitcodeInto(Module *M) { } } -ErrorOr BitcodeReader::parseModuleTriple() { +ErrorOr BitcodeReader::parseModuleTriple() { if (Stream.EnterSubBlock(bitc::MODULE_BLOCK_ID)) return Error(InvalidRecord); SmallVector Record; - std::string Triple; + StringRef Triple; // Read all the records for this module. while (1) { BitstreamEntry Entry = Stream.advanceSkippingSubblocks(); @@ -2142,10 +2151,10 @@ ErrorOr BitcodeReader::parseModuleTriple() { switch (Stream.readRecord(Entry.ID, Record)) { default: break; // Default behavior, ignore unknown content. case bitc::MODULE_CODE_TRIPLE: { // TRIPLE: [strchr x N] - std::string S; - if (ConvertToString(Record, 0, S)) - return Error(InvalidRecord); - Triple = S; + ErrorOr S = convertToStringRef(Record, 0); + if (std::error_code EC = S.getError()) + return EC; + Triple = S.get(); break; } } @@ -2154,7 +2163,7 @@ ErrorOr BitcodeReader::parseModuleTriple() { return Triple; } -ErrorOr BitcodeReader::parseTriple() { +ErrorOr BitcodeReader::parseTriple() { if (std::error_code EC = InitStream()) return EC; @@ -3469,10 +3478,10 @@ ErrorOr llvm::parseBitcodeFile(MemoryBuffer *Buffer, return M; } -std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer, - LLVMContext &Context) { +StringRef llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer, + LLVMContext &Context) { BitcodeReader *R = new BitcodeReader(Buffer, Context); - ErrorOr Triple = R->parseTriple(); + ErrorOr Triple = R->parseTriple(); R->releaseBuffer(); delete R; if (Triple.getError()) -- cgit v1.1