Static Value-Flow Analysis
Public Types | Public Member Functions | Protected Member Functions | Private Attributes | List of all members
SVF::MutableDiffPTData< Key, KeySet, Data, DataSet > Class Template Reference

DiffPTData implemented with points-to sets which are updated continuously. More...

#include <MutablePointsToDS.h>

Inheritance diagram for SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >:
SVF::DiffPTData< Key, KeySet, Data, DataSet > SVF::PTData< Key, KeySet, Data, DataSet >

Public Types

typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef DiffPTData< Key, KeySet, Data, DataSet > BaseDiffPTData
 
typedef BasePTData::PTDataTy PTDataTy
 
typedef MutablePTData< Key, KeySet, Data, DataSet >::PtsMap PtsMap
 
- Public Types inherited from SVF::DiffPTData< Key, KeySet, Data, DataSet >
typedef PTData< Key, KeySet, Data, DataSet > BasePTData
 
typedef BasePTData::PTDataTy PTDataTy
 
- Public Types inherited from SVF::PTData< Key, KeySet, Data, DataSet >
enum  PTDataTy {
  Base , MutBase , Diff , MutDiff ,
  DataFlow , MutDataFlow , MutIncDataFlow , Versioned ,
  MutVersioned , PersBase , PersDiff , PersDataFlow ,
  PersIncDataFlow , PersVersioned
}
 Types of a points-to data structures. More...
 

Public Member Functions

 MutableDiffPTData (bool reversePT=true, PTDataTy ty=PTDataTy::Diff)
 Constructor. More...
 
 ~MutableDiffPTData () override=default
 
virtual const PtsMapgetPtsMap () const
 
void clear () override
 Clears all points-to sets as if nothing is stored. More...
 
virtual const DataSet & getPts (const Key &var) override
 Get points-to set of var. More...
 
virtual const KeySet & getRevPts (const Data &datum) override
 Get reverse points-to set of a datum. More...
 
virtual bool addPts (const Key &dstKey, const Data &element) override
 Adds element to the points-to set associated with var. More...
 
virtual bool unionPts (const Key &dstKey, const Key &srcKey) override
 Performs pts(dstVar) = pts(dstVar) U pts(srcVar). More...
 
virtual bool unionPts (const Key &dstKey, const DataSet &srcDataSet) override
 Performs pts(dstVar) = pts(dstVar) U srcDataSet. More...
 
virtual void clearPts (const Key &var, const Data &element) override
 Clears element from the points-to set of var. More...
 
virtual void clearFullPts (const Key &var) override
 Fully clears the points-to set of var. More...
 
virtual void remapAllPts (void) override
 Remaps all points-to sets to use the current mapping. More...
 
virtual void dumpPTData () override
 Dump stored keys and points-to sets. More...
 
virtual const DataSet & getDiffPts (Key &var) override
 Get diff points to. More...
 
virtual bool computeDiffPts (Key &var, const DataSet &all) override
 
virtual void updatePropaPtsMap (Key &src, Key &dst) override
 
virtual void clearPropaPts (Key &var) override
 Clear propagated points-to set of var. More...
 
virtual Map< DataSet, unsigned > getAllPts (bool liveOnly) const override
 
- Public Member Functions inherited from SVF::DiffPTData< Key, KeySet, Data, DataSet >
 DiffPTData (bool reversePT=true, PTDataTy ty=PTDataTy::Diff)
 
virtual ~DiffPTData ()
 
- Public Member Functions inherited from SVF::PTData< Key, KeySet, Data, DataSet >
 PTData (bool reversePT=true, PTDataTy ty=PTDataTy::Base)
 
virtual ~PTData ()
 
PTDataTy getPTDTY () const
 Get the type of points-to data structure that this is. More...
 

Static Public Member Functions

static bool classof (const MutableDiffPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 
- Static Public Member Functions inherited from SVF::DiffPTData< Key, KeySet, Data, DataSet >
static bool classof (const DiffPTData< Key, KeySet, Data, DataSet > *)
 
static bool classof (const PTData< Key, KeySet, Data, DataSet > *ptd)
 

Protected Member Functions

DataSet & getPropaPts (Key &var)
 Get propagated points to. More...
 

Private Attributes

MutablePTData< Key, KeySet, Data, DataSet > mutPTData
 Backing to implement the basic PTData methods. This allows us to avoid multiple-inheritance. More...
 
PtsMap diffPtsMap
 Diff points-to to be propagated. More...
 
PtsMap propaPtsMap
 Points-to already propagated. More...
 

Additional Inherited Members

- Protected Attributes inherited from SVF::PTData< Key, KeySet, Data, DataSet >
bool rev
 Whether we maintain reverse points-to sets or not. More...
 
PTDataTy ptdTy
 

Detailed Description

template<typename Key, typename KeySet, typename Data, typename DataSet>
class SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >

DiffPTData implemented with points-to sets which are updated continuously.

Definition at line 227 of file MutablePointsToDS.h.

Member Typedef Documentation

◆ BaseDiffPTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef DiffPTData<Key, KeySet, Data, DataSet> SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::BaseDiffPTData

Definition at line 231 of file MutablePointsToDS.h.

◆ BasePTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef PTData<Key, KeySet, Data, DataSet> SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::BasePTData

Definition at line 230 of file MutablePointsToDS.h.

◆ PTDataTy

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef BasePTData::PTDataTy SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::PTDataTy

Definition at line 232 of file MutablePointsToDS.h.

◆ PtsMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
typedef MutablePTData<Key, KeySet, Data, DataSet>::PtsMap SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::PtsMap

Definition at line 234 of file MutablePointsToDS.h.

Constructor & Destructor Documentation

◆ MutableDiffPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::MutableDiffPTData ( bool  reversePT = true,
PTDataTy  ty = PTDataTy::Diff 
)
inlineexplicit

Constructor.

Definition at line 237 of file MutablePointsToDS.h.

237 : BaseDiffPTData(reversePT, ty), mutPTData(reversePT) { }
MutablePTData< Key, KeySet, Data, DataSet > mutPTData
Backing to implement the basic PTData methods. This allows us to avoid multiple-inheritance.
DiffPTData< Key, KeySet, Data, DataSet > BaseDiffPTData

◆ ~MutableDiffPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::~MutableDiffPTData ( )
overridedefault

Member Function Documentation

◆ addPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::addPts ( const Key &  var,
const Data &  element 
)
inlineoverridevirtual

Adds element to the points-to set associated with var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 262 of file MutablePointsToDS.h.

263  {
264  return mutPTData.addPts(dstKey, element);
265  }

◆ classof() [1/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
static bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::classof ( const MutableDiffPTData< Key, KeySet, Data, DataSet > *  )
inlinestatic

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

Definition at line 335 of file MutablePointsToDS.h.

336  {
337  return true;
338  }

◆ classof() [2/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
static bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::classof ( const PTData< Key, KeySet, Data, DataSet > *  ptd)
inlinestatic

Definition at line 340 of file MutablePointsToDS.h.

341  {
342  return ptd->getPTDTY() == PTDataTy::MutDiff;
343  }

◆ clear()

template<typename Key , typename KeySet , typename Data , typename DataSet >
void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::clear ( )
inlineoverridevirtual

Clears all points-to sets as if nothing is stored.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 246 of file MutablePointsToDS.h.

247  {
248  mutPTData.clear();
249  }

◆ clearFullPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::clearFullPts ( const Key &  var)
inlineoverridevirtual

Fully clears the points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 282 of file MutablePointsToDS.h.

283  {
284  mutPTData.clearFullPts(var);
285  }

◆ clearPropaPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::clearPropaPts ( Key &  var)
inlineoverridevirtual

Clear propagated points-to set of var.

Implements SVF::DiffPTData< Key, KeySet, Data, DataSet >.

Definition at line 323 of file MutablePointsToDS.h.

324  {
325  getPropaPts(var).clear();
326  }
DataSet & getPropaPts(Key &var)
Get propagated points to.

◆ clearPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::clearPts ( const Key &  var,
const Data &  element 
)
inlineoverridevirtual

Clears element from the points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 277 of file MutablePointsToDS.h.

278  {
279  mutPTData.clearPts(var, element);
280  }

◆ computeDiffPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::computeDiffPts ( Key &  var,
const DataSet &  all 
)
inlineoverridevirtual

Compute diff points to. Return TRUE if diff is not empty.

  1. calculate diff: diff = all - propa.
  2. update propagated pts: propa = all.

Clear diff pts.

Get all pts.

Implements SVF::DiffPTData< Key, KeySet, Data, DataSet >.

Definition at line 304 of file MutablePointsToDS.h.

305  {
307  DataSet& diff = diffPtsMap[var];
308  diff.clear();
310  DataSet& propa = getPropaPts(var);
311  diff.intersectWithComplement(all, propa);
312  propa = all;
313  return !diff.empty();
314  }
PtsMap diffPtsMap
Diff points-to to be propagated.

◆ dumpPTData()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::dumpPTData ( )
inlineoverridevirtual

Dump stored keys and points-to sets.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 294 of file MutablePointsToDS.h.

295  {
296  mutPTData.dumpPTData();
297  }

◆ getAllPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual Map<DataSet, unsigned> SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getAllPts ( bool  liveOnly) const
inlineoverridevirtual

Returns a mapping of points-to sets to the number of times they are stored. liveOnly indicates whether to include only points-to sets which correspond to a variable (matters when dealing with non-GC persistent PT).

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 328 of file MutablePointsToDS.h.

329  {
330  return mutPTData.getAllPts(liveOnly);
331  }

◆ getDiffPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual const DataSet& SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getDiffPts ( Key &  var)
inlineoverridevirtual

Get diff points to.

Implements SVF::DiffPTData< Key, KeySet, Data, DataSet >.

Definition at line 299 of file MutablePointsToDS.h.

300  {
301  return diffPtsMap[var];
302  }

◆ getPropaPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
DataSet& SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getPropaPts ( Key &  var)
inlineprotected

Get propagated points to.

Definition at line 348 of file MutablePointsToDS.h.

349  {
350  return propaPtsMap[var];
351  }
PtsMap propaPtsMap
Points-to already propagated.

◆ getPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual const DataSet& SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getPts ( const Key &  var)
inlineoverridevirtual

Get points-to set of var.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 251 of file MutablePointsToDS.h.

252  {
253  return mutPTData.getPts(var);
254  }

◆ getPtsMap()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual const PtsMap& SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getPtsMap ( ) const
inlinevirtual

Definition at line 241 of file MutablePointsToDS.h.

242  {
243  return mutPTData.getPtsMap();
244  }

◆ getRevPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual const KeySet& SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::getRevPts ( const Data &  datum)
inlineoverridevirtual

Get reverse points-to set of a datum.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 256 of file MutablePointsToDS.h.

257  {
258  assert(this->rev && "MutableDiffPTData::getRevPts: constructed without reverse PT support!");
259  return mutPTData.getRevPts(datum);
260  }
bool rev
Whether we maintain reverse points-to sets or not.

◆ remapAllPts()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::remapAllPts ( void  )
inlineoverridevirtual

Remaps all points-to sets to use the current mapping.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 287 of file MutablePointsToDS.h.

288  {
289  mutPTData.remapAllPts();
290  for (typename PtsMap::value_type &ppt : diffPtsMap) ppt.second.checkAndRemap();
291  for (typename PtsMap::value_type &ppt : propaPtsMap) ppt.second.checkAndRemap();
292  }

◆ unionPts() [1/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::unionPts ( const Key &  dstVar,
const DataSet &  srcDataSet 
)
inlineoverridevirtual

Performs pts(dstVar) = pts(dstVar) U srcDataSet.

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 272 of file MutablePointsToDS.h.

273  {
274  return mutPTData.unionPts(dstKey, srcDataSet);
275  }

◆ unionPts() [2/2]

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual bool SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::unionPts ( const Key &  dstVar,
const Key &  srcVar 
)
inlineoverridevirtual

Performs pts(dstVar) = pts(dstVar) U pts(srcVar).

Implements SVF::PTData< Key, KeySet, Data, DataSet >.

Definition at line 267 of file MutablePointsToDS.h.

268  {
269  return mutPTData.unionPts(dstKey, srcKey);
270  }

◆ updatePropaPtsMap()

template<typename Key , typename KeySet , typename Data , typename DataSet >
virtual void SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::updatePropaPtsMap ( Key &  src,
Key &  dst 
)
inlineoverridevirtual

Update dst's propagated points-to set with src's. The final result is the intersection of these two sets.

Implements SVF::DiffPTData< Key, KeySet, Data, DataSet >.

Definition at line 316 of file MutablePointsToDS.h.

317  {
318  DataSet& srcPropa = getPropaPts(src);
319  DataSet& dstPropa = getPropaPts(dst);
320  dstPropa &= srcPropa;
321  }

Member Data Documentation

◆ diffPtsMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
PtsMap SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::diffPtsMap
private

Diff points-to to be propagated.

Definition at line 357 of file MutablePointsToDS.h.

◆ mutPTData

template<typename Key , typename KeySet , typename Data , typename DataSet >
MutablePTData<Key, KeySet, Data, DataSet> SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::mutPTData
private

Backing to implement the basic PTData methods. This allows us to avoid multiple-inheritance.

Definition at line 355 of file MutablePointsToDS.h.

◆ propaPtsMap

template<typename Key , typename KeySet , typename Data , typename DataSet >
PtsMap SVF::MutableDiffPTData< Key, KeySet, Data, DataSet >::propaPtsMap
private

Points-to already propagated.

Definition at line 359 of file MutablePointsToDS.h.


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