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 |