diff options
-rw-r--r-- | lib/VMCore/iMemory.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/VMCore/iMemory.cpp b/lib/VMCore/iMemory.cpp index cc24ca1441..e980d600d4 100644 --- a/lib/VMCore/iMemory.cpp +++ b/lib/VMCore/iMemory.cpp @@ -27,13 +27,12 @@ const Type* MemAccessInst::getIndexedType(const Type *Ptr, if (Ptr->isStructType()) { unsigned CurIDX = 0; - while (Ptr->isStructType()) { + while (const StructType *ST = dyn_cast<StructType>(Ptr)) { if (Idx.size() == CurIDX) return AllowStructLeaf ? Ptr : 0; // Can't load a whole structure!?!? if (Idx[CurIDX]->getType() != Type::UByteTy) return 0; // Illegal idx unsigned NextIdx = ((ConstPoolUInt*)Idx[CurIDX++])->getValue(); - - const StructType *ST = (const StructType *)Ptr; + if (NextIdx >= ST->getElementTypes().size()) return 0; Ptr = ST->getElementTypes()[NextIdx]; } return Ptr; |