From b7a029873183cde33cfe065e655cd95309c6ac7f Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 17 Apr 2015 19:56:21 +0000 Subject: [opaque pointer types] Use the pointee type loaded from bitcode when constructing a LoadInst Now (with a few carefully placed suppressions relating to general type serialization, etc) we can round trip a simple load through bitcode and textual IR without calling getElementType on a PointerType. llvm-svn: 235221 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index a3552e92a53..bc78a71efad 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -4002,15 +4002,16 @@ std::error_code BitcodeReader::ParseFunctionBody(Function *F) { Type *Ty = nullptr; if (OpNum + 3 == Record.size()) Ty = getTypeByID(Record[OpNum++]); + if (!Ty) + Ty = cast(Op->getType())->getElementType(); + else if (Ty != cast(Op->getType())->getElementType()) + return Error("Explicit load type does not match pointee type of " + "pointer operand"); unsigned Align; if (std::error_code EC = parseAlignmentValue(Record[OpNum], Align)) return EC; - I = new LoadInst(Op, "", Record[OpNum+1], Align); - - if (Ty && Ty != I->getType()) - return Error("Explicit load type does not match pointee type of " - "pointer operand"); + I = new LoadInst(Ty, Op, "", Record[OpNum + 1], Align); InstructionList.push_back(I); break; -- cgit v1.2.3