From 9e716de70506e02f522fe79dd5692132ebc59b79 Mon Sep 17 00:00:00 2001 From: Shreya Singh <40202207+SHREYASINGH29@users.noreply.github.com> Date: Thu, 24 Jun 2021 15:24:07 +0530 Subject: [PATCH] Handle nested struct index type --- lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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);