summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Bitcode/BitstreamReader.h15
-rw-r--r--lib/Bitcode/Reader/BitstreamReader.cpp13
2 files changed, 20 insertions, 8 deletions
diff --git a/include/llvm/Bitcode/BitstreamReader.h b/include/llvm/Bitcode/BitstreamReader.h
index d6d9e34868..3e8d880da4 100644
--- a/include/llvm/Bitcode/BitstreamReader.h
+++ b/include/llvm/Bitcode/BitstreamReader.h
@@ -506,9 +506,20 @@ public:
/// skipRecord - Read the current record and discard it.
void skipRecord(unsigned AbbrevID);
+ unsigned readRecord(unsigned AbbrevID, SmallVectorImpl<uint64_t> &Vals,
+ StringRef *Blob = 0);
+
unsigned ReadRecord(unsigned AbbrevID, SmallVectorImpl<uint64_t> &Vals,
- const char **BlobStart = 0, unsigned *BlobLen = 0);
-
+ const char **BlobStart = 0, unsigned *BlobLen = 0) {
+ if (!BlobStart)
+ return readRecord(AbbrevID, Vals);
+ StringRef S;
+ unsigned X = readRecord(AbbrevID, Vals, &S);
+ *BlobStart = S.data();
+ *BlobLen = S.size();
+ return X;
+ }
+
unsigned ReadRecord(unsigned AbbrevID, SmallVectorImpl<uint64_t> &Vals,
const char *&BlobStart, unsigned &BlobLen) {
return ReadRecord(AbbrevID, Vals, &BlobStart, &BlobLen);
diff --git a/lib/Bitcode/Reader/BitstreamReader.cpp b/lib/Bitcode/Reader/BitstreamReader.cpp
index be70f5213b..84d5ca6150 100644
--- a/lib/Bitcode/Reader/BitstreamReader.cpp
+++ b/lib/Bitcode/Reader/BitstreamReader.cpp
@@ -198,9 +198,9 @@ void BitstreamCursor::skipRecord(unsigned AbbrevID) {
}
}
-unsigned BitstreamCursor::ReadRecord(unsigned AbbrevID,
+unsigned BitstreamCursor::readRecord(unsigned AbbrevID,
SmallVectorImpl<uint64_t> &Vals,
- const char **BlobStart, unsigned *BlobLen){
+ StringRef *Blob) {
if (AbbrevID == bitc::UNABBREV_RECORD) {
unsigned Code = ReadVBR(6);
unsigned NumElts = ReadVBR(6);
@@ -256,10 +256,11 @@ unsigned BitstreamCursor::ReadRecord(unsigned AbbrevID,
// Otherwise, read the number of bytes. If we can return a reference to
// the data, do so to avoid copying it.
- if (BlobStart) {
- *BlobStart = (const char*)BitStream->getBitcodeBytes().getPointer(
- NextChar, NumElts);
- *BlobLen = NumElts;
+ if (Blob) {
+ *Blob =
+ StringRef((const char*)BitStream->getBitcodeBytes().getPointer(
+ NextChar, NumElts),
+ NumElts);
} else {
for (; NumElts; ++NextChar, --NumElts)
Vals.push_back(getByte(NextChar));