aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-01-14 22:19:44 +0000
committerChris Lattner <sabre@nondot.org>2003-01-14 22:19:44 +0000
commit6d57086129102cde3c4bec03a09ab0e358ee5af5 (patch)
treeb79939aaa82852dca7518fcf293124782a6bc34f
parent3501feab811c86c9659248a4875fc31a3165f84d (diff)
Fix bug Regression/Verifier/2002-11-05-GetelementptrPointers.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5273 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/VMCore/Verifier.cpp1
-rw-r--r--lib/VMCore/iMemory.cpp10
2 files changed, 6 insertions, 5 deletions
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index 145a66caf5..e156692ee8 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -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
diff --git a/lib/VMCore/iMemory.cpp b/lib/VMCore/iMemory.cpp
index dacb8fe2a2..db9b9617a2 100644
--- a/lib/VMCore/iMemory.cpp
+++ b/lib/VMCore/iMemory.cpp
@@ -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;
}