From f12e18db21c9d156c374b11037a623f1e26322fc Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Wed, 3 Feb 2010 23:56:07 +0000 Subject: If we're dealing with a zero-length array, don't lower to any particular size, we just don't know what the length is yet. llvm-svn: 95266 --- llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 7ad3f186cb0..ebadfbcd373 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -648,14 +648,19 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { if (const ArrayType *AT = dyn_cast(ObjTy->getElementType())) { - // Deal with multi-dimensional arrays + // Deal with multi-dimensional arrays const ArrayType *SAT = AT; while ((AT = dyn_cast(AT->getElementType()))) SAT = AT; size_t numElems = SAT->getNumElements(); - // We return the remaining bytes, so grab the size of an element - // in bytes. + + // If numElems is 0, we don't know how large the array is so we can't + // make any determinations yet. + if (numElems == 0) break; + + // We return the remaining bytes, so grab the size of an element + // in bytes. size_t sizeofElem = SAT->getElementType()->getPrimitiveSizeInBits() / 8; ConstantInt *Const = @@ -665,7 +670,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { ConstantInt::get(ReturnTy, ((numElems - indx) * sizeofElem))); } - } + } // TODO: Add more types here. } } -- cgit v1.2.3