Fix for PR 14965: Better error message for GEP with partially defined contents

llvm-svn: 180030
This commit is contained in:
Eli Bendersky 2013-04-22 17:03:42 +00:00
parent 5e6a5d6ce5
commit d9806687bc
1 changed files with 7 additions and 2 deletions

View File

@ -4263,7 +4263,9 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
if (ParseTypeAndValue(Ptr, Loc, PFS)) return true;
if (!Ptr->getType()->getScalarType()->isPointerTy())
Type *BaseType = Ptr->getType();
PointerType *BasePointerType = dyn_cast<PointerType>(BaseType->getScalarType());
if (!BasePointerType)
return Error(Loc, "base of getelementptr must be a pointer");
SmallVector<Value*, 16> Indices;
@ -4288,7 +4290,10 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
Indices.push_back(Val);
}
if (!GetElementPtrInst::getIndexedType(Ptr->getType(), Indices))
if (!Indices.empty() && !BasePointerType->getElementType()->isSized())
return Error(Loc, "base element of getelementptr must be sized");
if (!GetElementPtrInst::getIndexedType(BaseType, Indices))
return Error(Loc, "invalid getelementptr indices");
Inst = GetElementPtrInst::Create(Ptr, Indices);
if (InBounds)