Bitcode: Correctly handle Fixed and VBR arrays in BitstreamCursor::skipRecord().
The assertions were wrong; we need to call getEncodingData() on the element, not the array. While here, simplify the skipRecord() implementation for Fixed and Char6 arrays. This is tested by the code I added to llvm-bcanalyzer which makes sure that we can skip any record. Differential Revision: https://reviews.llvm.org/D27241 llvm-svn: 288315
This commit is contained in:
@@ -131,18 +131,16 @@ void BitstreamCursor::skipRecord(unsigned AbbrevID) {
|
||||
default:
|
||||
report_fatal_error("Array element type can't be an Array or a Blob");
|
||||
case BitCodeAbbrevOp::Fixed:
|
||||
assert((unsigned)Op.getEncodingData() <= MaxChunkSize);
|
||||
for (; NumElts; --NumElts)
|
||||
Read((unsigned)EltEnc.getEncodingData());
|
||||
assert((unsigned)EltEnc.getEncodingData() <= MaxChunkSize);
|
||||
JumpToBit(GetCurrentBitNo() + NumElts * EltEnc.getEncodingData());
|
||||
break;
|
||||
case BitCodeAbbrevOp::VBR:
|
||||
assert((unsigned)Op.getEncodingData() <= MaxChunkSize);
|
||||
assert((unsigned)EltEnc.getEncodingData() <= MaxChunkSize);
|
||||
for (; NumElts; --NumElts)
|
||||
ReadVBR64((unsigned)EltEnc.getEncodingData());
|
||||
break;
|
||||
case BitCodeAbbrevOp::Char6:
|
||||
for (; NumElts; --NumElts)
|
||||
Read(6);
|
||||
JumpToBit(GetCurrentBitNo() + NumElts * 6);
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user