Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.765 -> 1.766 --- Log message: Fix Transforms/InstCombine/2007-05-14-Crash.ll --- Diffs of the changes: (+16 -7) InstructionCombining.cpp | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.765 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.766 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.765 Fri May 11 16:10:54 2007 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon May 14 19:16:00 2007 @@ -6454,16 +6454,25 @@ while (Offset) { if (const StructType *STy = dyn_cast<StructType>(GEPIdxTy)) { const StructLayout *SL = TD->getStructLayout(STy); - unsigned Elt = SL->getElementContainingOffset(Offset); - NewIndices.push_back(ConstantInt::get(Type::Int32Ty, Elt)); + if (Offset < (int64_t)SL->getSizeInBytes()) { + unsigned Elt = SL->getElementContainingOffset(Offset); + NewIndices.push_back(ConstantInt::get(Type::Int32Ty, Elt)); - Offset -= SL->getElementOffset(Elt); - GEPIdxTy = STy->getElementType(Elt); + Offset -= SL->getElementOffset(Elt); + GEPIdxTy = STy->getElementType(Elt); + } else { + // Otherwise, we can't index into this, bail out. + Offset = 0; + OrigBase = 0; + } } else if (isa<ArrayType>(GEPIdxTy) || isa<VectorType>(GEPIdxTy)) { const SequentialType *STy = cast<SequentialType>(GEPIdxTy); - uint64_t EltSize = TD->getTypeSize(STy->getElementType()); - NewIndices.push_back(ConstantInt::get(IntPtrTy, Offset/EltSize)); - Offset %= EltSize; + if (uint64_t EltSize = TD->getTypeSize(STy->getElementType())) { + NewIndices.push_back(ConstantInt::get(IntPtrTy,Offset/EltSize)); + Offset %= EltSize; + } else { + NewIndices.push_back(ConstantInt::get(IntPtrTy, 0)); + } GEPIdxTy = STy->getElementType(); } else { // Otherwise, we can't index into this, bail out. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits