Chromium Code Reviews| Index: lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
| diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
| index eab4609770a6d9e917cc42d61747115bd7458c07..cc737c6a5afcd64ebf1a8a066ce39007e7dd243e 100644 |
| --- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
| +++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp |
| @@ -1850,7 +1850,8 @@ std::error_code NaClBitcodeReader::ParseFunctionBody(Function *F) { |
| // TODO(kschimpf): Deal with values that are too large for NumCases. |
| size_t NumCases = Record[3]; |
| - SwitchInst *SI = SwitchInst::Create(Cond, Default, NumCases); |
| + std::unique_ptr<SwitchInst> SI( |
| + SwitchInst::Create(Cond, Default, NumCases)); |
| size_t CurIdx = 4; |
| for (size_t i = 0; i != NumCases; ++i) { |
| @@ -1870,9 +1871,11 @@ std::error_code NaClBitcodeReader::ParseFunctionBody(Function *F) { |
| APInt CaseValue(ValueBitWidth, |
| NaClDecodeSignRotatedValue(Record[CurIdx++])); |
| BasicBlock *DestBB = getBasicBlock(Record[CurIdx++]); |
| + if (DestBB == nullptr) |
| + return Error(InvalidValue, "Invalid branch in SWITCH case"); |
| SI->addCase(ConstantInt::get(Context, CaseValue), DestBB); |
| } |
| - I = SI; |
| + I = SI.release(); |
|
JF
2015/08/20 16:24:00
At this point it's probably better to do the chang
Karl
2015/08/20 18:30:51
Acknowledged.
|
| break; |
| } |
| case naclbitc::FUNC_CODE_INST_UNREACHABLE: // UNREACHABLE |