mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Fix bug Regression/Verifier/2002-11-05-GetelementptrPointers.ll
llvm-svn: 5273
This commit is contained in:
parent
b27d60ccf1
commit
e914281bf0
@ -23,7 +23,6 @@
|
||||
// * All Instructions must be embeded into a basic block
|
||||
// . Function's cannot take a void typed parameter
|
||||
// * Verify that a function's argument list agrees with it's declared type.
|
||||
// . Verify that arrays and structures have fixed elements: No unsized arrays.
|
||||
// * It is illegal to specify a name for a void value.
|
||||
// * It is illegal to have a internal global value with no intitalizer
|
||||
// * It is illegal to have a ret instruction that returns a value that does not
|
||||
|
@ -116,16 +116,18 @@ const Type* GetElementPtrInst::getIndexedType(const Type *Ptr,
|
||||
// Handle the special case of the empty set index set...
|
||||
if (Idx.empty()) return cast<PointerType>(Ptr)->getElementType();
|
||||
|
||||
unsigned CurIDX = 0;
|
||||
unsigned CurIdx = 0;
|
||||
while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
|
||||
if (Idx.size() == CurIDX) {
|
||||
if (Idx.size() == CurIdx) {
|
||||
if (AllowCompositeLeaf || CT->isFirstClassType()) return Ptr;
|
||||
return 0; // Can't load a whole structure or array!?!?
|
||||
}
|
||||
|
||||
Value *Index = Idx[CurIDX++];
|
||||
Value *Index = Idx[CurIdx++];
|
||||
if (isa<PointerType>(CT) && CurIdx != 1)
|
||||
return 0; // Can only index into pointer types at the first index!
|
||||
if (!CT->indexValid(Index)) return 0;
|
||||
Ptr = CT->getTypeAtIndex(Index);
|
||||
}
|
||||
return CurIDX == Idx.size() ? Ptr : 0;
|
||||
return CurIdx == Idx.size() ? Ptr : 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user