[cfe-dev] Static Checker: getting svals for a struct field value
McDowell, Raymond C. via cfe-dev
cfe-dev at lists.llvm.org
Mon May 9 11:55:09 PDT 2016
I am new to building Clang static checkers and need some help. I am implementing a PreCall callback function that checks calls to a certain family of functions (from a local library) that takes a struct as an argument. I see how to get the SVal and Expr for the argument using CallEvent::getArgSVal() and CallEvent::getArgExpr(). What I'm struggling with is how to go from the SVal for the struct to an SVal for one of its fields. In particular, how do I get the memory region associated with the struct value? Once I have that, I think I know how to go from there, e.g.:
RecordType *structTy = structReg->getValueType()->getAsStructureType();
assert(structTy && "Value is not a structure");
RecordDecl *structRD = structTy ->getDecl()->getDefinition();
assert(structRD && "structure has no definition");
for (const auto *F : structRD->fields()) {
FieldRegion *FR = MRMgr.getFieldRegion(F, structReg);
if (FR->getDec()->getName() == "fieldName")
size = StoreMgr.getBinding(store, loc::MemRegionVal(FR));
}
But how do I get the memory region structReg? And how do I get the Store store?
Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160509/d3655ac5/attachment.html>
More information about the cfe-dev
mailing list