Static Value-Flow Analysis
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
SVF::PointsTo Class Reference

#include <PointsTo.h>

Classes

class  PointsToIterator
 

Public Types

enum  Type { SBV , CBV , BV }
 
typedef PointsToIterator const_iterator
 
typedef const_iterator iterator
 
typedef std::shared_ptr< std::vector< NodeID > > MappingPtr
 

Public Member Functions

 PointsTo ()
 Construct empty points-to set.
 
 PointsTo (const PointsTo &pt)
 Copy constructor.
 
 PointsTo (PointsTo &&pt) noexcept
 Move constructor.
 
 ~PointsTo ()
 
PointsTo & operator= (const PointsTo &rhs)
 Copy assignment.
 
PointsTo & operator= (PointsTo &&rhs) noexcept
 Move assignment.
 
bool empty () const
 Returns true if set is empty.
 
u32_t count () const
 Returns number of elements.
 
void clear ()
 Empty the set.
 
bool test (u32_t n) const
 Returns true if n is in this set.
 
bool test_and_set (u32_t n)
 
void set (u32_t n)
 Inserts n in the set.
 
void reset (u32_t n)
 Removes n from the set.
 
bool contains (const PointsTo &rhs) const
 Returns true if this set is a superset of rhs.
 
bool intersects (const PointsTo &rhs) const
 Returns true if this set and rhs share any elements.
 
int find_first ()
 
bool operator== (const PointsTo &rhs) const
 Returns true if this set and rhs contain exactly the same elements.
 
bool operator!= (const PointsTo &rhs) const
 Returns true if either this set or rhs has an element not in the other.
 
bool operator|= (const PointsTo &rhs)
 
bool operator|= (const NodeBS &rhs)
 
bool operator&= (const PointsTo &rhs)
 
bool operator-= (const PointsTo &rhs)
 
bool intersectWithComplement (const PointsTo &rhs)
 
void intersectWithComplement (const PointsTo &lhs, const PointsTo &rhs)
 Put intersection of lhs with complement of rhs into this set (overwrites).
 
NodeBS toNodeBS () const
 Returns this points-to set as a NodeBS.
 
size_t hash () const
 Return a hash of this set.
 
void checkAndRemap ()
 
const_iterator begin () const
 
const_iterator end () const
 
MappingPtr getNodeMapping () const
 

Static Public Member Functions

static MappingPtr getCurrentBestNodeMapping ()
 
static MappingPtr getCurrentBestReverseNodeMapping ()
 
static void setCurrentBestNodeMapping (MappingPtr newCurrentBestNodeMapping, MappingPtr newCurrentBestReverseNodeMapping)
 

Private Member Functions

NodeID getInternalNode (NodeID n) const
 Returns nodeMapping[n], checking for nullptr and size.
 
NodeID getExternalNode (NodeID n) const
 Returns reverseNodeMapping[n], checking for nullptr and size.
 
bool metaSame (const PointsTo &pt) const
 
void destroyBacking ()
 

Private Attributes

union { 
 
   SparseBitVector   sbv 
 Sparse bit vector backing. More...
 
   CoreBitVector   cbv 
 Core bit vector backing. More...
 
   BitVector   bv 
 Bit vector backing. More...
 
};  
 
enum Type type
 Type of this points-to set.
 
MappingPtr nodeMapping
 External nodes -> internal nodes.
 
MappingPtr reverseNodeMapping
 Internal nodes -> external nodes.
 

Static Private Attributes

static MappingPtr currentBestNodeMapping = nullptr
 Best node mapping we know of the for the analyses at hand.
 
static MappingPtr currentBestReverseNodeMapping = nullptr
 Likewise, but reversed.
 

Detailed Description

Wraps data structures to provide a points-to set. Underlying data structure can be changed globally. Includes support for mapping nodes for better internal representation.

Definition at line 29 of file PointsTo.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 40 of file PointsTo.h.

◆ iterator

Definition at line 41 of file PointsTo.h.

◆ MappingPtr

typedef std::shared_ptr<std::vector<NodeID> > SVF::PointsTo::MappingPtr

Definition at line 43 of file PointsTo.h.

Member Enumeration Documentation

◆ Type

Enumerator
SBV 
CBV 
BV 

Definition at line 32 of file PointsTo.h.

33 {
34 SBV,
35 CBV,
36 BV,
37 };

Constructor & Destructor Documentation

◆ PointsTo() [1/3]

SVF::PointsTo::PointsTo ( )

Construct empty points-to set.

Definition at line 25 of file PointsTo.cpp.

28{
29 if (type == SBV) new (&sbv) SparseBitVector<>();
30 else if (type == CBV) new (&cbv) CoreBitVector();
31 else if (type == BV) new (&bv) BitVector();
32 else assert(false && "PointsTo::PointsTo: unknown type");
33}
static const OptionMap< PointsTo::Type > PtType
Type of points-to set to use for all analyses.
Definition Options.h:46
MappingPtr reverseNodeMapping
Internal nodes -> external nodes.
Definition PointsTo.h:184
static MappingPtr currentBestReverseNodeMapping
Likewise, but reversed.
Definition PointsTo.h:165
BitVector bv
Bit vector backing.
Definition PointsTo.h:176
CoreBitVector cbv
Core bit vector backing.
Definition PointsTo.h:174
static MappingPtr currentBestNodeMapping
Best node mapping we know of the for the analyses at hand.
Definition PointsTo.h:163
enum Type type
Type of this points-to set.
Definition PointsTo.h:180
MappingPtr nodeMapping
External nodes -> internal nodes.
Definition PointsTo.h:182
SparseBitVector sbv
Sparse bit vector backing.
Definition PointsTo.h:172
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76

◆ PointsTo() [2/3]

SVF::PointsTo::PointsTo ( const PointsTo &  pt)

Copy constructor.

Definition at line 35 of file PointsTo.cpp.

36 : type(pt.type), nodeMapping(pt.nodeMapping),
37 reverseNodeMapping(pt.reverseNodeMapping)
38{
39 if (type == SBV) new (&sbv) SparseBitVector<>(pt.sbv);
40 else if (type == CBV) new (&cbv) CoreBitVector(pt.cbv);
41 else if (type == BV) new (&bv) BitVector(pt.bv);
42 else assert(false && "PointsTo::PointsTo&: unknown type");
43}

◆ PointsTo() [3/3]

SVF::PointsTo::PointsTo ( PointsTo &&  pt)
noexcept

Move constructor.

Definition at line 45 of file PointsTo.cpp.

46 : type(pt.type), nodeMapping(std::move(pt.nodeMapping)),
47 reverseNodeMapping(std::move(pt.reverseNodeMapping))
48{
49 if (type == SBV) new (&sbv) SparseBitVector<>(std::move(pt.sbv));
50 else if (type == CBV) new (&cbv) CoreBitVector(std::move(pt.cbv));
51 else if (type == BV) new (&bv) BitVector(std::move(pt.bv));
52 else assert(false && "PointsTo::PointsTo&&: unknown type");
53}

◆ ~PointsTo()

SVF::PointsTo::~PointsTo ( )

Definition at line 63 of file PointsTo.cpp.

64{
66
67 nodeMapping = nullptr;
68 reverseNodeMapping = nullptr;
69}
void destroyBacking()
Definition PointsTo.cpp:55

Member Function Documentation

◆ begin()

const_iterator SVF::PointsTo::begin ( ) const
inline

Definition at line 129 of file PointsTo.h.

130 {
131 return PointsToIterator(this);
132 }

◆ checkAndRemap()

void SVF::PointsTo::checkAndRemap ( )

Checks if this points-to set is using the current best mapping. If not, remaps.

Definition at line 390 of file PointsTo.cpp.

391{
393 {
394 // newPt constructed with correct node mapping.
396 for (const NodeID o : *this) newPt.set(o);
397 *this = std::move(newPt);
398 }
399}
void set(u32_t n)
Inserts n in the set.
Definition PointsTo.cpp:169
PointsTo()
Construct empty points-to set.
Definition PointsTo.cpp:25
u32_t NodeID
Definition GeneralType.h:76

◆ clear()

void SVF::PointsTo::clear ( )

Empty the set.

Definition at line 135 of file PointsTo.cpp.

136{
137 if (type == CBV) cbv.clear();
138 else if (type == SBV) sbv.clear();
139 else if (type == BV) bv.clear();
140 else assert(false && "PointsTo::clear: unknown type");
141}
void clear(void)
Empty the CBV.

◆ contains()

bool SVF::PointsTo::contains ( const PointsTo &  rhs) const

Returns true if this set is a superset of rhs.

Definition at line 187 of file PointsTo.cpp.

188{
189 assert(metaSame(rhs) && "PointsTo::contains: mappings of operands do not match!");
190
191 if (type == CBV) return cbv.contains(rhs.cbv);
192 else if (type == SBV) return sbv.contains(rhs.sbv);
193 else if (type == BV) return bv.contains(rhs.bv);
194 else
195 {
196 assert(false && "PointsTo::contains: unknown type");
197 abort();
198 }
199}
bool contains(const CoreBitVector &rhs) const
Returns true if this CBV is a superset of rhs.
bool metaSame(const PointsTo &pt) const
Definition PointsTo.cpp:368
bool contains(const SparseBitVector< ElementSize > &RHS) const

◆ count()

u32_t SVF::PointsTo::count ( void  ) const

Returns number of elements.

Definition at line 123 of file PointsTo.cpp.

124{
125 if (type == CBV) return cbv.count();
126 else if (type == SBV) return sbv.count();
127 else if (type == BV) return bv.count();
128 else
129 {
130 assert(false && "PointsTo::count: unknown type");
131 abort();
132 }
133}
u32_t count(void) const
Returns number of bits set.
unsigned count() const

◆ destroyBacking()

void SVF::PointsTo::destroyBacking ( )
private

Ends the lifetime of the backing this set currently holds, through the type currently stored in type. Callers that then placement new a new backing must call this first, or whatever the old backing owned is lost.

Definition at line 55 of file PointsTo.cpp.

56{
57 if (type == SBV) sbv.~SparseBitVector<>();
58 else if (type == CBV) cbv.~CoreBitVector();
59 else if (type == BV) bv.~BitVector();
60 else assert(false && "PointsTo::destroyBacking: unknown type");
61}

◆ empty()

bool SVF::PointsTo::empty ( ) const

Returns true if set is empty.

Definition at line 110 of file PointsTo.cpp.

111{
112 if (type == CBV) return cbv.empty();
113 else if (type == SBV) return sbv.empty();
114 else if (type == BV) return bv.empty();
115 else
116 {
117 assert(false && "PointsTo::empty: unknown type");
118 abort();
119 }
120}
bool empty(void) const
Returns true if no bits are set.

◆ end()

const_iterator SVF::PointsTo::end ( ) const
inline

Definition at line 133 of file PointsTo.h.

134 {
135 return PointsToIterator(this, true);
136 }

◆ find_first()

int SVF::PointsTo::find_first ( )

Returns the first element the set. Returns -1 when the set is empty. TODO: should we diverge from LLVM about the int return?

Definition at line 215 of file PointsTo.cpp.

216{
217 if (count() == 0) return -1;
218 return *begin();
219}
u32_t count() const
Returns number of elements.
Definition PointsTo.cpp:123
const_iterator begin() const
Definition PointsTo.h:129

◆ getCurrentBestNodeMapping()

PointsTo::MappingPtr SVF::PointsTo::getCurrentBestNodeMapping ( )
static

Definition at line 373 of file PointsTo.cpp.

374{
376}

◆ getCurrentBestReverseNodeMapping()

PointsTo::MappingPtr SVF::PointsTo::getCurrentBestReverseNodeMapping ( )
static

Definition at line 378 of file PointsTo.cpp.

379{
381}

◆ getExternalNode()

NodeID SVF::PointsTo::getExternalNode ( NodeID  n) const
private

Returns reverseNodeMapping[n], checking for nullptr and size.

Definition at line 361 of file PointsTo.cpp.

362{
363 if (reverseNodeMapping == nullptr) return n;
365 return reverseNodeMapping->at(n);
366}
cJSON * n
Definition cJSON.cpp:2558

◆ getInternalNode()

NodeID SVF::PointsTo::getInternalNode ( NodeID  n) const
private

Returns nodeMapping[n], checking for nullptr and size.

Definition at line 354 of file PointsTo.cpp.

355{
356 if (nodeMapping == nullptr) return n;
358 return nodeMapping->at(n);
359}

◆ getNodeMapping()

PointsTo::MappingPtr SVF::PointsTo::getNodeMapping ( ) const

Definition at line 349 of file PointsTo.cpp.

350{
351 return nodeMapping;
352}

◆ hash()

size_t SVF::PointsTo::hash ( ) const

Return a hash of this set.

Definition at line 332 of file PointsTo.cpp.

333{
334 if (type == CBV) return cbv.hash();
335 else if (type == SBV)
336 {
337 std::hash<SparseBitVector<>> h;
338 return h(sbv);
339 }
340 else if (type == BV) return bv.hash();
341
342 else
343 {
344 assert(false && "PointsTo::hash: unknown type");
345 abort();
346 }
347}
size_t hash(void) const
Hash for this CBV.

◆ intersects()

bool SVF::PointsTo::intersects ( const PointsTo &  rhs) const

Returns true if this set and rhs share any elements.

Definition at line 201 of file PointsTo.cpp.

202{
203 assert(metaSame(rhs) && "PointsTo::intersects: mappings of operands do not match!");
204
205 if (type == CBV) return cbv.intersects(rhs.cbv);
206 else if (type == SBV) return sbv.intersects(rhs.sbv);
207 else if (type == BV) return bv.intersects(rhs.bv);
208 else
209 {
210 assert(false && "PointsTo::intersects: unknown type");
211 abort();
212 }
213}
bool intersects(const CoreBitVector &rhs) const
Returns true if this CBV and rhs share any set bits.
bool intersects(const SparseBitVector< ElementSize > *RHS) const

◆ intersectWithComplement() [1/2]

void SVF::PointsTo::intersectWithComplement ( const PointsTo &  lhs,
const PointsTo &  rhs 
)

Put intersection of lhs with complement of rhs into this set (overwrites).

Definition at line 310 of file PointsTo.cpp.

311{
312 assert(metaSame(rhs) && "PointsTo::intersectWithComplement: mappings of operands do not match!");
313 assert(metaSame(lhs) && "PointsTo::intersectWithComplement: mappings of operands do not match!");
314
315 if (type == CBV) cbv.intersectWithComplement(lhs.cbv, rhs.cbv);
316 else if (type == SBV) sbv.intersectWithComplement(lhs.sbv, rhs.sbv);
317 else if (type == BV) bv.intersectWithComplement(lhs.bv, rhs.bv);
318 else
319 {
320 assert(false && "PointsTo::intersectWithComplement(PT, PT): unknown type");
321 abort();
322 }
323}
bool intersectWithComplement(const CoreBitVector &rhs)
bool intersectWithComplement(const SparseBitVector &RHS)

◆ intersectWithComplement() [2/2]

bool SVF::PointsTo::intersectWithComplement ( const PointsTo &  rhs)

Put intersection of this set with complement of rhs into this set. Returns true if this set changed.

Definition at line 298 of file PointsTo.cpp.

299{
300 assert(metaSame(rhs) && "PointsTo::intersectWithComplement: mappings of operands do not match!");
301
302 if (type == CBV) return cbv.intersectWithComplement(rhs.cbv);
303 else if (type == SBV) return sbv.intersectWithComplement(rhs.sbv);
304 else if (type == BV) return bv.intersectWithComplement(rhs.bv);
305
306 assert(false && "PointsTo::intersectWithComplement(PT): unknown type");
307 abort();
308}

◆ metaSame()

bool SVF::PointsTo::metaSame ( const PointsTo &  pt) const
private

Returns true if this points-to set and pt have the same type, nodeMapping, and reverseNodeMapping

Definition at line 368 of file PointsTo.cpp.

369{
370 return nodeMapping == pt.nodeMapping && reverseNodeMapping == pt.reverseNodeMapping;
371}

◆ operator!=()

bool SVF::PointsTo::operator!= ( const PointsTo &  rhs) const

Returns true if either this set or rhs has an element not in the other.

Definition at line 235 of file PointsTo.cpp.

236{
237 // TODO: we're asserting and checking twice... should be okay...
238 assert(metaSame(rhs) && "PointsTo::!=: mappings of operands do not match!");
239
240 return !(*this == rhs);
241}

◆ operator&=()

bool SVF::PointsTo::operator&= ( const PointsTo &  rhs)

Put intersection of this set and rhs into this set. Returns true if this set changed.

Definition at line 270 of file PointsTo.cpp.

271{
272 assert(metaSame(rhs) && "PointsTo::&=: mappings of operands do not match!");
273
274 if (type == CBV) return cbv &= rhs.cbv;
275 else if (type == SBV) return sbv &= rhs.sbv;
276 else if (type == BV) return bv &= rhs.bv;
277 else
278 {
279 assert(false && "PointsTo::&=: unknown type");
280 abort();
281 }
282}

◆ operator-=()

bool SVF::PointsTo::operator-= ( const PointsTo &  rhs)

Remove elements in rhs from this set. Returns true if this set changed.

Definition at line 284 of file PointsTo.cpp.

285{
286 assert(metaSame(rhs) && "PointsTo::-=: mappings of operands do not match!");
287
288 if (type == CBV) return cbv.intersectWithComplement(rhs.cbv);
289 else if (type == SBV) return sbv.intersectWithComplement(rhs.sbv);
290 else if (type == BV) return bv.intersectWithComplement(rhs.bv);
291 else
292 {
293 assert(false && "PointsTo::-=: unknown type");
294 abort();
295 }
296}

◆ operator=() [1/2]

PointsTo & SVF::PointsTo::operator= ( const PointsTo &  rhs)

Copy assignment.

Definition at line 71 of file PointsTo.cpp.

72{
73 if (this == &rhs)
74 return *this;
75 // End the lifetime of the backing held now before placement new builds the
76 // new one over it. Destroy through the type stored now, which may differ
77 // from rhs's. Without this the old backing's storage is never freed.
79 this->type = rhs.type;
80 this->nodeMapping = rhs.nodeMapping;
81 this->reverseNodeMapping = rhs.reverseNodeMapping;
82 // Placement new because if type has changed, we have
83 // not constructed the new type yet.
84 if (type == SBV) new (&sbv) SparseBitVector<>(rhs.sbv);
85 else if (type == CBV) new (&cbv) CoreBitVector(rhs.cbv);
86 else if (type == BV) new (&bv) BitVector(rhs.bv);
87 else assert(false && "PointsTo::PointsTo=&: unknown type");
88
89 return *this;
90}

◆ operator=() [2/2]

PointsTo & SVF::PointsTo::operator= ( PointsTo &&  rhs)
noexcept

Move assignment.

Definition at line 92 of file PointsTo.cpp.

94{
95 if (this == &rhs)
96 return *this;
97 // See comment in copy assignment.
99 this->type = rhs.type;
100 this->nodeMapping = rhs.nodeMapping;
101 this->reverseNodeMapping = rhs.reverseNodeMapping;
102 if (type == SBV) new (&sbv) SparseBitVector<>(std::move(rhs.sbv));
103 else if (type == CBV) new (&cbv) CoreBitVector(std::move(rhs.cbv));
104 else if (type == BV) new (&bv) BitVector(std::move(rhs.bv));
105 else assert(false && "PointsTo::PointsTo=&&: unknown type");
106
107 return *this;
108}

◆ operator==()

bool SVF::PointsTo::operator== ( const PointsTo &  rhs) const

Returns true if this set and rhs contain exactly the same elements.

Definition at line 221 of file PointsTo.cpp.

222{
223 assert(metaSame(rhs) && "PointsTo::==: mappings of operands do not match!");
224
225 if (type == CBV) return cbv == rhs.cbv;
226 else if (type == SBV) return sbv == rhs.sbv;
227 else if (type == BV) return bv == rhs.bv;
228 else
229 {
230 assert(false && "PointsTo::==: unknown type");
231 abort();
232 }
233}

◆ operator|=() [1/2]

bool SVF::PointsTo::operator|= ( const NodeBS &  rhs)

Definition at line 257 of file PointsTo.cpp.

258{
259 // TODO:
260 bool changed = false;
261 for (NodeID n : rhs)
262 {
263 if (changed) set(n);
264 else changed = test_and_set(n);
265 }
266
267 return changed;
268}
bool test_and_set(u32_t n)
Definition PointsTo.cpp:156

◆ operator|=() [2/2]

bool SVF::PointsTo::operator|= ( const PointsTo &  rhs)

Put union of this set and rhs into this set. Returns true if this set changed.

Definition at line 243 of file PointsTo.cpp.

244{
245 assert(metaSame(rhs) && "PointsTo::|=: mappings of operands do not match!");
246
247 if (type == CBV) return cbv |= rhs.cbv;
248 else if (type == SBV) return sbv |= rhs.sbv;
249 else if (type == BV) return bv |= rhs.bv;
250 else
251 {
252 assert(false && "PointsTo::|=: unknown type");
253 abort();
254 }
255}

◆ reset()

void SVF::PointsTo::reset ( u32_t  n)

Removes n from the set.

Definition at line 178 of file PointsTo.cpp.

179{
181 if (type == CBV) cbv.reset(n);
182 else if (type == SBV) sbv.reset(n);
183 else if (type == BV) bv.reset(n);
184 else assert(false && "PointsTo::reset: unknown type");
185}
void reset(u32_t bit)
Resets bit in the CBV.
NodeID getInternalNode(NodeID n) const
Returns nodeMapping[n], checking for nullptr and size.
Definition PointsTo.cpp:354
void reset(unsigned Idx)

◆ set()

void SVF::PointsTo::set ( u32_t  n)

Inserts n in the set.

Definition at line 169 of file PointsTo.cpp.

170{
172 if (type == CBV) cbv.set(n);
173 else if (type == SBV) sbv.set(n);
174 else if (type == BV) bv.set(n);
175 else assert(false && "PointsTo::set: unknown type");
176}
void set(u32_t bit)
Sets bit in the CBV.
void set(unsigned Idx)

◆ setCurrentBestNodeMapping()

void SVF::PointsTo::setCurrentBestNodeMapping ( MappingPtr  newCurrentBestNodeMapping,
MappingPtr  newCurrentBestReverseNodeMapping 
)
static

◆ test()

bool SVF::PointsTo::test ( u32_t  n) const

Returns true if n is in this set.

Definition at line 143 of file PointsTo.cpp.

144{
146 if (type == CBV) return cbv.test(n);
147 else if (type == SBV) return sbv.test(n);
148 else if (type == BV) return bv.test(n);
149 else
150 {
151 assert(false && "PointsTo::test: unknown type");
152 abort();
153 }
154}
bool test(u32_t bit) const
Returns true if bit is set in this CBV.
bool test(unsigned Idx) const

◆ test_and_set()

bool SVF::PointsTo::test_and_set ( u32_t  n)

Check if n is in set. If it is, returns false. Otherwise, inserts n and returns true.

Definition at line 156 of file PointsTo.cpp.

157{
159 if (type == CBV) return cbv.test_and_set(n);
160 else if (type == SBV) return sbv.test_and_set(n);
161 else if (type == BV) return bv.test_and_set(n);
162 else
163 {
164 assert(false && "PointsTo::test_and_set: unknown type");
165 abort();
166 }
167}
bool test_and_set(u32_t bit)
bool test_and_set(unsigned Idx)

◆ toNodeBS()

NodeBS SVF::PointsTo::toNodeBS ( ) const

Returns this points-to set as a NodeBS.

Definition at line 325 of file PointsTo.cpp.

326{
327 NodeBS nbs;
328 for (const NodeID o : *this) nbs.set(o);
329 return nbs;
330}
SparseBitVector NodeBS
Definition GeneralType.h:82

Member Data Documentation

◆ [union]

union { ... } SVF::PointsTo

Holds backing data structure. TODO: std::variant when we move to C++17.

◆ bv

BitVector SVF::PointsTo::bv

Bit vector backing.

Definition at line 176 of file PointsTo.h.

◆ cbv

CoreBitVector SVF::PointsTo::cbv

Core bit vector backing.

Definition at line 174 of file PointsTo.h.

◆ currentBestNodeMapping

PointsTo::MappingPtr SVF::PointsTo::currentBestNodeMapping = nullptr
staticprivate

Best node mapping we know of the for the analyses at hand.

Definition at line 163 of file PointsTo.h.

◆ currentBestReverseNodeMapping

PointsTo::MappingPtr SVF::PointsTo::currentBestReverseNodeMapping = nullptr
staticprivate

Likewise, but reversed.

Definition at line 165 of file PointsTo.h.

◆ nodeMapping

MappingPtr SVF::PointsTo::nodeMapping
private

External nodes -> internal nodes.

Definition at line 182 of file PointsTo.h.

◆ reverseNodeMapping

MappingPtr SVF::PointsTo::reverseNodeMapping
private

Internal nodes -> external nodes.

Definition at line 184 of file PointsTo.h.

◆ sbv

SparseBitVector SVF::PointsTo::sbv

Sparse bit vector backing.

Definition at line 172 of file PointsTo.h.

◆ type

enum Type SVF::PointsTo::type
private

Type of this points-to set.

Definition at line 180 of file PointsTo.h.


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