mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-03 16:18:37 +00:00
Fix a crash compiling Obsequi
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26529 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9e14cd355f
commit
2cfdd2854c
@ -637,17 +637,24 @@ CheckGEPInstructions(const Type* BasePtr1Ty, std::vector<Value*> &GEP1Ops,
|
||||
// than the first constant index of GEP2.
|
||||
|
||||
// Advance BasePtr[12]Ty over this first differing constant operand.
|
||||
BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP2Ops[FirstConstantOper]);
|
||||
BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP1Ops[FirstConstantOper]);
|
||||
BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->
|
||||
getTypeAtIndex(GEP2Ops[FirstConstantOper]);
|
||||
BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->
|
||||
getTypeAtIndex(GEP1Ops[FirstConstantOper]);
|
||||
|
||||
// We are going to be using TargetData::getIndexedOffset to determine the
|
||||
// offset that each of the GEP's is reaching. To do this, we have to convert
|
||||
// all variable references to constant references. To do this, we convert the
|
||||
// initial equal sequence of variables into constant zeros to start with.
|
||||
for (unsigned i = 0; i != FirstConstantOper; ++i)
|
||||
if (!isa<ConstantInt>(GEP1Ops[i]) || !isa<ConstantInt>(GEP2Ops[i]))
|
||||
// initial sequence of array subscripts into constant zeros to start with.
|
||||
const Type *ZeroIdxTy = GEPPointerTy;
|
||||
for (unsigned i = 0; i != FirstConstantOper; ++i) {
|
||||
if (!isa<StructType>(ZeroIdxTy))
|
||||
GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::UIntTy);
|
||||
|
||||
if (const CompositeType *CT = dyn_cast<CompositeType>(ZeroIdxTy))
|
||||
ZeroIdxTy = CT->getTypeAtIndex(GEP1Ops[i]);
|
||||
}
|
||||
|
||||
// We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
|
||||
|
||||
// Loop over the rest of the operands...
|
||||
|
Loading…
x
Reference in New Issue
Block a user