mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Fix for PR 14965: Better error message for GEP with partially defined contents
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180030 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44021515d7
commit
59eb5eeca7
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user