1
0
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:
Chris Lattner 2003-01-14 22:19:44 +00:00
parent b27d60ccf1
commit e914281bf0
2 changed files with 6 additions and 5 deletions

View File

@ -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

View File

@ -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;
}