From: Chris Lattner Date: Sat, 4 Mar 2006 21:48:01 +0000 (+0000) Subject: Fix a crash compiling Obsequi X-Git-Tag: android-x86-6.0-r1~1003^2~44145 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2cfdd2854c7bcc050758749a2e28e5f7b3c1b35f;p=android-x86%2Fexternal-llvm.git Fix a crash compiling Obsequi git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26529 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index f10691e531f..9a839ffdc52 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -637,17 +637,24 @@ CheckGEPInstructions(const Type* BasePtr1Ty, std::vector &GEP1Ops, // than the first constant index of GEP2. // Advance BasePtr[12]Ty over this first differing constant operand. - BasePtr2Ty = cast(BasePtr1Ty)->getTypeAtIndex(GEP2Ops[FirstConstantOper]); - BasePtr1Ty = cast(BasePtr1Ty)->getTypeAtIndex(GEP1Ops[FirstConstantOper]); + BasePtr2Ty = cast(BasePtr1Ty)-> + getTypeAtIndex(GEP2Ops[FirstConstantOper]); + BasePtr1Ty = cast(BasePtr1Ty)-> + getTypeAtIndex(GEP1Ops[FirstConstantOper]); // We are going to be using TargetData::getIndexedOffset to determine the // offset that each of the GEP's is reaching. To do this, we have to convert // all variable references to constant references. To do this, we convert the - // initial equal sequence of variables into constant zeros to start with. - for (unsigned i = 0; i != FirstConstantOper; ++i) - if (!isa(GEP1Ops[i]) || !isa(GEP2Ops[i])) + // initial sequence of array subscripts into constant zeros to start with. + const Type *ZeroIdxTy = GEPPointerTy; + for (unsigned i = 0; i != FirstConstantOper; ++i) { + if (!isa(ZeroIdxTy)) GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::UIntTy); + if (const CompositeType *CT = dyn_cast(ZeroIdxTy)) + ZeroIdxTy = CT->getTypeAtIndex(GEP1Ops[i]); + } + // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok // Loop over the rest of the operands...