diff options
Diffstat (limited to 'lib/Bitcode')
-rw-r--r-- | lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp | 17 | ||||
-rw-r--r-- | lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp | 6 |
2 files changed, 11 insertions, 12 deletions
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp index 57dcea8953..8defdb5d1b 100644 --- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp +++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp @@ -2283,16 +2283,15 @@ bool NaClBitcodeReader::ParseFunctionBody(Function *F) { break; } - case naclbitc::FUNC_CODE_INST_ALLOCA: { // ALLOCA: [instty, opty, op, align] - if (Record.size() != 4) + case naclbitc::FUNC_CODE_INST_ALLOCA: { // ALLOCA: [op, align] + if (Record.size() != 2) + return Error("Invalid ALLOCA record"); + Value *Size; + unsigned OpNum = 0; + if (getValue(Record, OpNum, NextValueNo, Size)) return Error("Invalid ALLOCA record"); - PointerType *Ty = - dyn_cast_or_null<PointerType>(getTypeByID(Record[0])); - Type *OpTy = getTypeByID(Record[1]); - Value *Size = getOrCreateFnValueByID(Record[2], OpTy); - unsigned Align = Record[3]; - if (!Ty || !Size) return Error("Invalid ALLOCA record"); - I = new AllocaInst(Ty->getElementType(), Size, (1 << Align) >> 1); + unsigned Align = Record[1]; + I = new AllocaInst(Type::getInt8Ty(Context), Size, (1 << Align) >> 1); InstructionList.push_back(I); break; } diff --git a/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp b/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp index b41b3c83c6..f25be94b3c 100644 --- a/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp +++ b/lib/Bitcode/NaCl/Writer/NaClBitcodeWriter.cpp @@ -1358,10 +1358,10 @@ static void WriteInstruction(const Instruction &I, unsigned InstID, } case Instruction::Alloca: + if (!cast<AllocaInst>(&I)->getAllocatedType()->isIntegerTy(8)) + report_fatal_error("Type of alloca instruction is not i8"); Code = naclbitc::FUNC_CODE_INST_ALLOCA; - Vals.push_back(VE.getTypeID(I.getType())); - Vals.push_back(VE.getTypeID(I.getOperand(0)->getType())); - Vals.push_back(VE.getValueID(I.getOperand(0))); // size. + PushValueAndType(I.getOperand(0), InstID, Vals, VE, Stream); // size. Vals.push_back(Log2_32(cast<AllocaInst>(I).getAlignment())+1); break; |