diff options
author | Nikita Popov <npopov@redhat.com> | 2022-02-07 10:34:34 +0100 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2022-02-07 10:34:34 +0100 |
commit | 8a718541838a0ab1e87f4b8923bb16e640f73de3 (patch) | |
tree | 0b3c37fb007cfb2d8fa15143b883c6ef6ba1476b /llvm/lib/Bitstream/Reader/BitstreamReader.cpp | |
parent | 82ef888fbf3a19c80b042c483fe939d93d187f1d (diff) | |
download | llvm-8a718541838a0ab1e87f4b8923bb16e640f73de3.zip llvm-8a718541838a0ab1e87f4b8923bb16e640f73de3.tar.gz llvm-8a718541838a0ab1e87f4b8923bb16e640f73de3.tar.bz2 |
[Bitcode] Handle invalid abbrev number error more gracefully
Avoid report_fatal_error(), propagate the error upwards instead.
Diffstat (limited to 'llvm/lib/Bitstream/Reader/BitstreamReader.cpp')
-rw-r--r-- | llvm/lib/Bitstream/Reader/BitstreamReader.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Bitstream/Reader/BitstreamReader.cpp b/llvm/lib/Bitstream/Reader/BitstreamReader.cpp index 3865af1..ffeb506 100644 --- a/llvm/lib/Bitstream/Reader/BitstreamReader.cpp +++ b/llvm/lib/Bitstream/Reader/BitstreamReader.cpp @@ -111,7 +111,11 @@ Expected<unsigned> BitstreamCursor::skipRecord(unsigned AbbrevID) { return Code; } - const BitCodeAbbrev *Abbv = getAbbrev(AbbrevID); + Expected<const BitCodeAbbrev *> MaybeAbbv = getAbbrev(AbbrevID); + if (!MaybeAbbv) + return MaybeAbbv.takeError(); + + const BitCodeAbbrev *Abbv = MaybeAbbv.get(); const BitCodeAbbrevOp &CodeOp = Abbv->getOperandInfo(0); unsigned Code; if (CodeOp.isLiteral()) @@ -228,7 +232,10 @@ Expected<unsigned> BitstreamCursor::readRecord(unsigned AbbrevID, return Code; } - const BitCodeAbbrev *Abbv = getAbbrev(AbbrevID); + Expected<const BitCodeAbbrev *> MaybeAbbv = getAbbrev(AbbrevID); + if (!MaybeAbbv) + return MaybeAbbv.takeError(); + const BitCodeAbbrev *Abbv = MaybeAbbv.get(); // Read the record code first. assert(Abbv->getNumOperandInfos() != 0 && "no record code in abbreviation?"); |