diff options
Diffstat (limited to 'llvm/lib/Bitstream/Reader/BitstreamReader.cpp')
| -rw-r--r-- | llvm/lib/Bitstream/Reader/BitstreamReader.cpp | 18 | 
1 files changed, 7 insertions, 11 deletions
| diff --git a/llvm/lib/Bitstream/Reader/BitstreamReader.cpp b/llvm/lib/Bitstream/Reader/BitstreamReader.cpp index 92d7c91a1d35..2739137c1e44 100644 --- a/llvm/lib/Bitstream/Reader/BitstreamReader.cpp +++ b/llvm/lib/Bitstream/Reader/BitstreamReader.cpp @@ -214,6 +214,7 @@ Expected<unsigned> BitstreamCursor::readRecord(unsigned AbbrevID,      if (!MaybeNumElts)        return MaybeNumElts.takeError();      uint32_t NumElts = MaybeNumElts.get(); +    Vals.reserve(Vals.size() + NumElts);      for (unsigned i = 0; i != NumElts; ++i)        if (Expected<uint64_t> MaybeVal = ReadVBR64(6)) @@ -263,6 +264,7 @@ Expected<unsigned> BitstreamCursor::readRecord(unsigned AbbrevID,        if (!MaybeNumElts)          return MaybeNumElts.takeError();        uint32_t NumElts = MaybeNumElts.get(); +      Vals.reserve(Vals.size() + NumElts);        // Get the element encoding.        if (i + 2 != e) @@ -334,8 +336,8 @@ Expected<unsigned> BitstreamCursor::readRecord(unsigned AbbrevID,        *Blob = StringRef(Ptr, NumElts);      } else {        // Otherwise, unpack into Vals with zero extension. -      for (; NumElts; --NumElts) -        Vals.push_back((unsigned char)*Ptr++); +      auto *UPtr = reinterpret_cast<const unsigned char *>(Ptr); +      Vals.append(UPtr, UPtr + NumElts);      }    } @@ -458,21 +460,15 @@ BitstreamCursor::ReadBlockInfoBlock(bool ReadBlockInfoNames) {          return None;        if (!ReadBlockInfoNames)          break; // Ignore name. -      std::string Name; -      for (unsigned i = 0, e = Record.size(); i != e; ++i) -        Name += (char)Record[i]; -      CurBlockInfo->Name = Name; +      CurBlockInfo->Name = std::string(Record.begin(), Record.end());        break;      }        case bitc::BLOCKINFO_CODE_SETRECORDNAME: {          if (!CurBlockInfo) return None;          if (!ReadBlockInfoNames)            break; // Ignore name. -        std::string Name; -        for (unsigned i = 1, e = Record.size(); i != e; ++i) -          Name += (char)Record[i]; -        CurBlockInfo->RecordNames.push_back(std::make_pair((unsigned)Record[0], -                                                           Name)); +        CurBlockInfo->RecordNames.emplace_back( +            (unsigned)Record[0], std::string(Record.begin() + 1, Record.end()));          break;        }        } | 
