From 428098de6289762990fdc368474e6b464112bbcc Mon Sep 17 00:00:00 2001 From: Sanjiv Gupta Date: Mon, 20 Apr 2009 06:05:54 +0000 Subject: [PATCH] Before trying to introduce/eliminate cast/ext/trunc to make indices type as pointer type, make sure that the pointer size is a valid sequential index type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69574 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/InstructionCombining.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index a2658b3e3f1..0d32eacbb17 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -10695,7 +10695,12 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) { gep_type_iterator GTI = gep_type_begin(GEP); for (User::op_iterator i = GEP.op_begin() + 1, e = GEP.op_end(); i != e; ++i, ++GTI) { - if (isa(*GTI)) { + // Before trying to eliminate/introduce cast/ext/trunc to make + // indices as pointer types, make sure that the pointer size + // makes a valid sequential index. + const SequentialType *ST = dyn_cast(*GTI); + Value *PtrTypeVal = Constant::getNullValue(TD->getIntPtrType()); + if (ST && ST->indexValid(PtrTypeVal)) { if (CastInst *CI = dyn_cast(*i)) { if (CI->getOpcode() == Instruction::ZExt || CI->getOpcode() == Instruction::SExt) { -- 2.34.1