diff --git a/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp b/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp index aa333b0..7fca8c0 100644 --- a/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp +++ b/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp @@ -396,11 +396,13 @@ LFCPAInstModel::handleGEPUtil(llvm::GEPOperator *G, template bool LFCPAInstModel::isStructFieldPointerTy(GOP *G) { - long int cntOp = G->getNumOperands(); - llvm::Type* BaseTy = G->getOperand(0)->getType()->getContainedType(0); - llvm::ConstantInt *CI = llvm::dyn_cast(G->getOperand(cntOp-1)); - auto conVal = CI->getSExtValue(); - return (BaseTy->getStructElementType(conVal)->isPointerTy()); + llvm::Type *StructType = G->getOperand(0)->getType()->getContainedType(0); + for (int i = 2; i < G->getNumOperands(); i++) { + llvm::Value *IdxV = G->getOperand(i); + llvm::ConstantInt *Idx = llvm::cast(IdxV); + StructType = StructType->getStructElementType(Idx->getSExtValue()); + } + return StructType->isPointerTy(); } template bool LFCPAInstModel::isStructFieldPointerTy(llvm::GetElementPtrInst *G);