svf-lib 1.0.809 → 1.0.810
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
Binary file
|
|
@@ -569,7 +569,7 @@ public:
|
|
|
569
569
|
u32_t getNumSuccessors() const{
|
|
570
570
|
return brstmt->getNumSuccessors();
|
|
571
571
|
}
|
|
572
|
-
const
|
|
572
|
+
const BranchStmt::SuccAndCondPairVec& getSuccessors() const{
|
|
573
573
|
return brstmt->getSuccessors();
|
|
574
574
|
}
|
|
575
575
|
const ICFGNode* getSuccessor (u32_t i) const{
|
|
@@ -637,7 +637,7 @@ private:
|
|
|
637
637
|
/// Add Unary edge
|
|
638
638
|
UnaryOPStmt* addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode);
|
|
639
639
|
/// Add BranchStmt
|
|
640
|
-
BranchStmt* addBranchStmt(NodeID br, NodeID cond,
|
|
640
|
+
BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs);
|
|
641
641
|
/// Add Load edge
|
|
642
642
|
LoadStmt* addLoadStmt(NodeID src, NodeID dst);
|
|
643
643
|
/// Add Store edge
|
|
@@ -839,6 +839,8 @@ public:
|
|
|
839
839
|
*/
|
|
840
840
|
class BranchStmt: public SVFStmt
|
|
841
841
|
{
|
|
842
|
+
public:
|
|
843
|
+
typedef std::vector<std::pair<const ICFGNode*, s64_t> > SuccAndCondPairVec;
|
|
842
844
|
private:
|
|
843
845
|
BranchStmt(); ///< place holder
|
|
844
846
|
BranchStmt(const BranchStmt &); ///< place holder
|
|
@@ -848,9 +850,10 @@ private:
|
|
|
848
850
|
NodeID getSrcID(); ///< place holder, use getOpVarID(pos) instead
|
|
849
851
|
NodeID getDstID(); ///< place holder, use getResID() instead
|
|
850
852
|
|
|
851
|
-
|
|
853
|
+
SuccAndCondPairVec successors;
|
|
852
854
|
const SVFVar* cond;
|
|
853
855
|
const SVFVar* brInst;
|
|
856
|
+
|
|
854
857
|
public:
|
|
855
858
|
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
|
856
859
|
//@{
|
|
@@ -869,7 +872,7 @@ public:
|
|
|
869
872
|
//@}
|
|
870
873
|
|
|
871
874
|
/// constructor
|
|
872
|
-
BranchStmt(SVFVar* inst, SVFVar* c, const
|
|
875
|
+
BranchStmt(SVFVar* inst, SVFVar* c, const SuccAndCondPairVec& succs) : SVFStmt(c,inst,SVFStmt::Branch), successors(succs), cond(c), brInst(inst)
|
|
873
876
|
{
|
|
874
877
|
}
|
|
875
878
|
|
|
@@ -882,18 +885,31 @@ public:
|
|
|
882
885
|
const SVFVar* getBranchInst() const{
|
|
883
886
|
return brInst;
|
|
884
887
|
}
|
|
888
|
+
|
|
889
|
+
/// For example if(c) {stmt1} else {stmt2}
|
|
890
|
+
/// successor(0): stmt1, 1
|
|
891
|
+
/// successor(1): stmt2, 0
|
|
892
|
+
|
|
893
|
+
/// For example switch(c) case 0: {stmt1; break;} case 1: {stmt2; break;} default {stmt3: break}
|
|
894
|
+
/// successor(0): stmt1, 0
|
|
895
|
+
/// successor(1): stmt2, 1
|
|
896
|
+
/// successor(3): stmt3, -1
|
|
897
|
+
|
|
885
898
|
/// Successors of this branch statement
|
|
886
899
|
///@{
|
|
887
900
|
u32_t getNumSuccessors() const{
|
|
888
901
|
return successors.size();
|
|
889
902
|
}
|
|
890
|
-
const
|
|
903
|
+
const SuccAndCondPairVec& getSuccessors() const{
|
|
891
904
|
return successors;
|
|
892
905
|
}
|
|
893
906
|
const ICFGNode* getSuccessor (u32_t i) const{
|
|
894
|
-
return successors.at(i);
|
|
907
|
+
return successors.at(i).first;
|
|
895
908
|
}
|
|
896
|
-
|
|
909
|
+
s64_t getSuccessorCondValue (u32_t i) const{
|
|
910
|
+
return successors.at(i).second;
|
|
911
|
+
}
|
|
912
|
+
//@}
|
|
897
913
|
virtual const std::string toString() const override;
|
|
898
914
|
};
|
|
899
915
|
|
|
@@ -331,7 +331,7 @@ public:
|
|
|
331
331
|
return edge;
|
|
332
332
|
}
|
|
333
333
|
/// Add Branch statement
|
|
334
|
-
inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const
|
|
334
|
+
inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs){
|
|
335
335
|
BranchStmt *edge = pag->addBranchStmt(br, cond, succs);
|
|
336
336
|
setCurrentBBAndValueForPAGEdge(edge);
|
|
337
337
|
return edge;
|