mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +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
|
// * All Instructions must be embeded into a basic block
|
||||||
// . Function's cannot take a void typed parameter
|
// . Function's cannot take a void typed parameter
|
||||||
// * Verify that a function's argument list agrees with it's declared type.
|
// * 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 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 internal global value with no intitalizer
|
||||||
// * It is illegal to have a ret instruction that returns a value that does not
|
// * 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...
|
// Handle the special case of the empty set index set...
|
||||||
if (Idx.empty()) return cast<PointerType>(Ptr)->getElementType();
|
if (Idx.empty()) return cast<PointerType>(Ptr)->getElementType();
|
||||||
|
|
||||||
unsigned CurIDX = 0;
|
unsigned CurIdx = 0;
|
||||||
while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
|
while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
|
||||||
if (Idx.size() == CurIDX) {
|
if (Idx.size() == CurIdx) {
|
||||||
if (AllowCompositeLeaf || CT->isFirstClassType()) return Ptr;
|
if (AllowCompositeLeaf || CT->isFirstClassType()) return Ptr;
|
||||||
return 0; // Can't load a whole structure or array!?!?
|
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;
|
if (!CT->indexValid(Index)) return 0;
|
||||||
Ptr = CT->getTypeAtIndex(Index);
|
Ptr = CT->getTypeAtIndex(Index);
|
||||||
}
|
}
|
||||||
return CurIDX == Idx.size() ? Ptr : 0;
|
return CurIdx == Idx.size() ? Ptr : 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user