Static Value-Flow Analysis
Loading...
Searching...
No Matches
SVF::GepStmt Class Reference

#include <SVFStatements.h>

Inheritance diagram for SVF::GepStmt:
SVF::AssignStmt SVF::SVFStmt SVF::GenericEdge< SVFVar >

Public Member Functions

const AccessPath & getAccessPath () const
const AccessPath::IdxOperandPairs getOffsetVarAndGepTypePairVec () const
bool isConstantOffset () const
 Return TRUE if this is a constant location set.
APOffset accumulateConstantByteOffset () const
APOffset accumulateConstantOffset () const
 Return accumulated constant offset (when accessing array or struct) if this offset is a constant.
APOffset getConstantStructFldIdx () const
 Field index of the gep statement if it access the field of a struct.
bool isVariantFieldGep () const
 Gep statement with a variant field index (pointer arithmetic) for struct field access.
 GepStmt (SVFVar *s, SVFVar *d, const AccessPath &ap, bool varfld=false)
 constructor
const ValVar * getRHSVar () const
const ValVar * getLHSVar () const
const ValVar * getSrcNode () const
const ValVar * getDstNode () const
virtual const std::string toString () const
Public Member Functions inherited from SVF::AssignStmt
SVFVar * getRHSVar () const
SVFVar * getLHSVar () const
NodeID getRHSVarID () const
NodeID getLHSVarID () const
Public Member Functions inherited from SVF::SVFStmt
 SVFStmt (SVFVar *s, SVFVar *d, GEdgeFlag k, bool real=true)
 Constructor.
 ~SVFStmt ()
 Destructor.
EdgeID getEdgeID () const
 Return Edge ID.
virtual bool isPTAEdge () const
 Whether src and dst nodes are both of pointer type.
void setValue (const SVFVar *val)
 Get/set methods for llvm instruction.
const SVFVar * getValue () const
void setBB (const SVFBasicBlock *bb)
const SVFBasicBlock * getBB () const
void setICFGNode (ICFGNode *node)
ICFGNode * getICFGNode () const
Public Member Functions inherited from SVF::GenericEdge< SVFVar >
 GenericEdge (SVFVar *s, SVFVar *d, GEdgeFlag k)
 Constructor.
virtual ~GenericEdge ()
 Destructor.
NodeID getSrcID () const
 get methods of the components
NodeID getDstID () const
GEdgeKind getEdgeKind () const
GEdgeKind getEdgeKindWithoutMask () const
NodeType * getSrcNode () const
NodeType * getDstNode () const
virtual bool operator== (const GenericEdge< NodeType > *rhs) const

Static Public Member Functions

static bool classof (const GepStmt *)
 Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof (const SVFStmt *edge)
static bool classof (const GenericPAGEdgeTy *edge)
Static Public Member Functions inherited from SVF::AssignStmt
static bool classof (const AssignStmt *)
 Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof (const SVFStmt *edge)
static bool classof (const GenericPAGEdgeTy *edge)
Static Public Member Functions inherited from SVF::SVFStmt
static bool classof (const SVFStmt *)
 ClassOf.
static bool classof (const GenericPAGEdgeTy *edge)
static GEdgeFlag makeEdgeFlagWithAddionalOpnd (GEdgeKind k, const SVFVar *var)
static GEdgeFlag makeEdgeFlagWithCallInst (GEdgeKind k, const ICFGNode *cs)
static GEdgeFlag makeEdgeFlagWithStoreInst (GEdgeKind k, const ICFGNode *store)
static const Inst2LabelMap * getInst2LabelMap ()
static const Var2LabelMap * getVar2LabelMap ()
static const u64_t * getCallEdgeLabelCounter ()
static const u64_t * getStoreEdgeLabelCounter ()
static const u64_t * getMultiOpndLabelCounter ()

Private Member Functions

 GepStmt (const GepStmt &)
 place holder
void operator= (const GepStmt &)
 place holder

Private Attributes

AccessPath ap
 Access path of the GEP edge.
bool variantField
 Gep statement with a variant field index (pointer arithmetic) for struct field access (e.g., p = &(q + f), where f is a variable).

Friends

class GraphDBClient

Additional Inherited Members

Public Types inherited from SVF::SVFStmt
enum  PEDGEK {
  Addr , Copy , Store , Load ,
  Call , Ret , Gep , Phi ,
  Select , Cmp , BinaryOp , UnaryOp ,
  Branch , ThreadFork , ThreadJoin
}
typedef GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy
typedef Map< EdgeID, SVFStmtSetTy > PAGEdgeToSetMapTy
typedef PAGEdgeToSetMapTy KindToSVFStmtMapTy
typedef SVFStmtSetTy PAGEdgeSetTy
Public Types inherited from SVF::GenericEdge< SVFVar >
typedef SVFVar NodeType
 Node type.
typedef u64_t GEdgeFlag
typedef s64_t GEdgeKind
typedef struct SVF::GenericEdge::equalGEdge equalGEdge
 Add the hash function for std::set (we also can overload operator< to implement this).
Protected Member Functions inherited from SVF::AssignStmt
 AssignStmt (SVFVar *s, SVFVar *d, GEdgeFlag k)
 constructor
Protected Member Functions inherited from SVF::SVFStmt
 SVFStmt (GEdgeFlag k)
 Private constructor for reading SVFIR from file without side-effect.
 SVFStmt (SVFVar *s, SVFVar *d, GEdgeFlag k, EdgeID eid, SVFVar *value, ICFGNode *icfgNode, bool real=true)
void setBasicBlock (const SVFBasicBlock *bb)
void setCallEdgeLabelCounter (u64_t counter)
void setStoreEdgeLabelCounter (u64_t counter)
void setMultiOpndLabelCounter (u64_t counter)
Static Protected Member Functions inherited from SVF::SVFStmt
static void addInst2Labeled (const ICFGNode *cs, u32_t label)
static void addVar2Labeled (const SVFVar *var, u32_t label)
Static Protected Attributes inherited from SVF::GenericEdge< SVFVar >
static constexpr unsigned char EdgeKindMaskBits
 We use the lower 8 bits to denote edge kind.
static constexpr u64_t EdgeKindMask

Detailed Description

Gep statement for struct field access, array access and pointer arithmetic

Definition at line 607 of file SVFStatements.h.

Constructor & Destructor Documentation

◆ GepStmt() [1/2]

SVF::GepStmt::GepStmt ( const GepStmt & )
private

place holder

◆ GepStmt() [2/2]

SVF::GepStmt::GepStmt ( SVFVar * s,
SVFVar * d,
const AccessPath & ap,
bool varfld = false )
inline

constructor

Definition at line 677 of file SVFStatements.h.

678 : AssignStmt(s, d, SVFStmt::Gep), ap(ap), variantField(varfld)
679 {
680 }
AssignStmt()
place holder
AccessPath ap
Access path of the GEP edge.
bool variantField
Gep statement with a variant field index (pointer arithmetic) for struct field access (e....

Member Function Documentation

◆ accumulateConstantByteOffset()

APOffset SVF::GepStmt::accumulateConstantByteOffset ( ) const
inline

Return accumulated constant offset (when accessing array or struct) if this offset is a constant. elemBytesize is the element byte size of an static alloc or heap alloc array e.g. GepStmt* gep = **, s32_t elemBytesize = LLVMUtil::SVFType2ByteSize(gep->getRHSVar()->getValue()->getType()); APOffset byteOffset = gep->accumulateConstantByteOffset(elemBytesize);

Definition at line 654 of file SVFStatements.h.

655 {
657 }
APOffset computeConstantByteOffset() const
const AccessPath & getAccessPath() const

◆ accumulateConstantOffset()

APOffset SVF::GepStmt::accumulateConstantOffset ( ) const
inline

Return accumulated constant offset (when accessing array or struct) if this offset is a constant.

Definition at line 660 of file SVFStatements.h.

661 {
663 }
APOffset computeConstantOffset() const
For example,.

◆ classof() [1/3]

bool SVF::GepStmt::classof ( const GenericPAGEdgeTy * edge)
inlinestatic

Definition at line 629 of file SVFStatements.h.

630 {
631 return edge->getEdgeKind() == SVFStmt::Gep;
632 }

◆ classof() [2/3]

bool SVF::GepStmt::classof ( const GepStmt * )
inlinestatic

Methods for support type inquiry through isa, cast, and dyn_cast:

Definition at line 621 of file SVFStatements.h.

622 {
623 return true;
624 }

◆ classof() [3/3]

bool SVF::GepStmt::classof ( const SVFStmt * edge)
inlinestatic

Definition at line 625 of file SVFStatements.h.

626 {
627 return edge->getEdgeKind() == SVFStmt::Gep;
628 }

◆ getAccessPath()

const AccessPath & SVF::GepStmt::getAccessPath ( ) const
inline

Definition at line 635 of file SVFStatements.h.

636 {
637 return ap;
638 }

◆ getConstantStructFldIdx()

APOffset SVF::GepStmt::getConstantStructFldIdx ( ) const
inline

Field index of the gep statement if it access the field of a struct.

Definition at line 665 of file SVFStatements.h.

666 {
667 assert(isVariantFieldGep()==false && "Can't retrieve the AccessPath if using a variable field index (pointer arithmetic) for struct field access ");
669 }
APOffset getConstantStructFldIdx() const
Get methods.
Definition AccessPath.h:102
bool isVariantFieldGep() const
Gep statement with a variant field index (pointer arithmetic) for struct field access.

◆ getDstNode()

const ValVar * GepStmt::getDstNode ( ) const

Definition at line 387 of file SVFStatements.cpp.

388{
389 return getLHSVar();
390}
const ValVar * getLHSVar() const

◆ getLHSVar()

const ValVar * GepStmt::getLHSVar ( ) const

Definition at line 379 of file SVFStatements.cpp.

380{
382}
NodeType * getDstNode() const
std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > cast(const Y &Val)
Definition Casting.h:360

◆ getOffsetVarAndGepTypePairVec()

const AccessPath::IdxOperandPairs SVF::GepStmt::getOffsetVarAndGepTypePairVec ( ) const
inline

Definition at line 639 of file SVFStatements.h.

640 {
642 }
const IdxOperandPairs & getIdxOperandPairVec() const
Definition AccessPath.h:110

◆ getRHSVar()

const ValVar * GepStmt::getRHSVar ( ) const

Definition at line 375 of file SVFStatements.cpp.

376{
378}
NodeType * getSrcNode() const

◆ getSrcNode()

const ValVar * GepStmt::getSrcNode ( ) const

Definition at line 383 of file SVFStatements.cpp.

384{
385 return getRHSVar();
386}
const ValVar * getRHSVar() const

◆ isConstantOffset()

bool SVF::GepStmt::isConstantOffset ( ) const
inline

Return TRUE if this is a constant location set.

Definition at line 644 of file SVFStatements.h.

645 {
647 }
bool isConstantOffset() const
Return TRUE if this is a constant location set.

◆ isVariantFieldGep()

bool SVF::GepStmt::isVariantFieldGep ( ) const
inline

Gep statement with a variant field index (pointer arithmetic) for struct field access.

Definition at line 671 of file SVFStatements.h.

672 {
673 return variantField;
674 }

◆ operator=()

void SVF::GepStmt::operator= ( const GepStmt & )
private

place holder

◆ toString()

const std::string GepStmt::toString ( ) const
virtual

Implements SVF::AssignStmt.

Definition at line 228 of file SVFStatements.cpp.

229{
230 std::string str;
231 std::stringstream rawstr(str);
232 rawstr << "GepStmt: [Var" << getLHSVarID() << " <-- Var" << getRHSVarID() << "]\t";
234 {
235 rawstr << "\n";
236 rawstr << getValue()->toString();
237 }
238 return rawstr.str();
239}
NodeID getRHSVarID() const
NodeID getLHSVarID() const
static const Option< bool > ShowSVFIRValue
Definition Options.h:120
const SVFVar * getValue() const
virtual const std::string toString() const
Get string representation.

◆ GraphDBClient

friend class GraphDBClient
friend

Definition at line 609 of file SVFStatements.h.

Member Data Documentation

◆ ap

AccessPath SVF::GepStmt::ap
private

Access path of the GEP edge.

Definition at line 616 of file SVFStatements.h.

◆ variantField

bool SVF::GepStmt::variantField
private

Gep statement with a variant field index (pointer arithmetic) for struct field access (e.g., p = &(q + f), where f is a variable).

Definition at line 617 of file SVFStatements.h.


The documentation for this class was generated from the following files: