svf-lib 1.0.732 → 1.0.736

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.
Files changed (94) hide show
  1. package/SVF-linux/Release-build/lib/libSvf.a +0 -0
  2. package/SVF-linux/include/DDA/ContextDDA.h +1 -1
  3. package/SVF-linux/include/DDA/DDAClient.h +8 -8
  4. package/SVF-linux/include/DDA/DDAVFSolver.h +5 -5
  5. package/SVF-linux/include/DDA/FlowDDA.h +1 -1
  6. package/SVF-linux/include/Graphs/ConsG.h +6 -6
  7. package/SVF-linux/include/Graphs/ConsGEdge.h +2 -2
  8. package/SVF-linux/include/Graphs/ConsGNode.h +1 -1
  9. package/SVF-linux/include/Graphs/ExternalPAG.h +14 -14
  10. package/SVF-linux/include/Graphs/GenericGraph.h +1 -1
  11. package/SVF-linux/include/Graphs/ICFGNode.h +14 -14
  12. package/SVF-linux/include/Graphs/IRGraph.h +236 -0
  13. package/SVF-linux/include/Graphs/OfflineConsG.h +1 -1
  14. package/SVF-linux/include/Graphs/SVFG.h +1 -1
  15. package/SVF-linux/include/Graphs/SVFGOPT.h +3 -3
  16. package/SVF-linux/include/Graphs/VFG.h +37 -52
  17. package/SVF-linux/include/Graphs/VFGNode.h +2 -3
  18. package/SVF-linux/include/MSSA/MemRegion.h +11 -11
  19. package/SVF-linux/include/MSSA/MemSSA.h +4 -4
  20. package/SVF-linux/include/MTA/FSMPTA.h +1 -1
  21. package/SVF-linux/include/MemoryModel/PAGBuilderFromFile.h +8 -8
  22. package/SVF-linux/include/MemoryModel/PTAStat.h +31 -31
  23. package/SVF-linux/include/MemoryModel/PointerAnalysis.h +9 -9
  24. package/SVF-linux/include/MemoryModel/PointerAnalysisImpl.h +3 -3
  25. package/SVF-linux/include/MemoryModel/SVFIR.h +526 -235
  26. package/SVF-linux/include/MemoryModel/SVFStatements.h +872 -0
  27. package/SVF-linux/include/MemoryModel/SVFVariables.h +842 -0
  28. package/SVF-linux/include/MemoryModel/SymbolTableInfo.h +346 -55
  29. package/SVF-linux/include/SABER/SaberSVFGBuilder.h +0 -2
  30. package/SVF-linux/include/SABER/SrcSnkDDA.h +3 -3
  31. package/SVF-linux/include/SVF-FE/Graph2Json.h +1 -3
  32. package/SVF-linux/include/SVF-FE/SVFIRBuilder.h +398 -0
  33. package/SVF-linux/include/SVF-FE/SymbolTableBuilder.h +0 -1
  34. package/SVF-linux/include/Util/CFLSolver.h +1 -1
  35. package/SVF-linux/include/Util/ExtAPI.h +1 -1
  36. package/SVF-linux/include/Util/IRAnnotator.h +6 -6
  37. package/SVF-linux/include/Util/Options.h +1 -1
  38. package/SVF-linux/include/Util/TypeBasedHeapCloning.h +11 -11
  39. package/SVF-linux/include/WPA/Andersen.h +11 -11
  40. package/SVF-linux/include/WPA/AndersenSFR.h +4 -4
  41. package/SVF-linux/include/WPA/FlowSensitive.h +2 -2
  42. package/SVF-linux/include/WPA/FlowSensitiveTBHC.h +1 -1
  43. package/SVF-linux/include/WPA/Steensgaard.h +2 -2
  44. package/SVF-linux/include/WPA/TypeAnalysis.h +1 -1
  45. package/SVF-linux/include/WPA/VersionedFlowSensitive.h +2 -2
  46. package/SVF-linux/include/WPA/WPAStat.h +1 -2
  47. package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
  48. package/SVF-osx/Release-build/lib/libSvf.a +0 -0
  49. package/SVF-osx/include/DDA/ContextDDA.h +1 -1
  50. package/SVF-osx/include/DDA/DDAClient.h +8 -8
  51. package/SVF-osx/include/DDA/DDAVFSolver.h +5 -5
  52. package/SVF-osx/include/DDA/FlowDDA.h +1 -1
  53. package/SVF-osx/include/Graphs/ConsG.h +6 -6
  54. package/SVF-osx/include/Graphs/ConsGEdge.h +2 -2
  55. package/SVF-osx/include/Graphs/ConsGNode.h +1 -1
  56. package/SVF-osx/include/Graphs/ExternalPAG.h +14 -14
  57. package/SVF-osx/include/Graphs/GenericGraph.h +1 -1
  58. package/SVF-osx/include/Graphs/ICFGNode.h +14 -14
  59. package/SVF-osx/include/Graphs/IRGraph.h +236 -0
  60. package/SVF-osx/include/Graphs/OfflineConsG.h +1 -1
  61. package/SVF-osx/include/Graphs/SVFG.h +1 -1
  62. package/SVF-osx/include/Graphs/SVFGOPT.h +3 -3
  63. package/SVF-osx/include/Graphs/VFG.h +37 -52
  64. package/SVF-osx/include/Graphs/VFGNode.h +2 -3
  65. package/SVF-osx/include/MSSA/MemRegion.h +11 -11
  66. package/SVF-osx/include/MSSA/MemSSA.h +4 -4
  67. package/SVF-osx/include/MTA/FSMPTA.h +1 -1
  68. package/SVF-osx/include/MemoryModel/PAGBuilderFromFile.h +8 -8
  69. package/SVF-osx/include/MemoryModel/PTAStat.h +31 -31
  70. package/SVF-osx/include/MemoryModel/PointerAnalysis.h +9 -9
  71. package/SVF-osx/include/MemoryModel/PointerAnalysisImpl.h +3 -3
  72. package/SVF-osx/include/MemoryModel/SVFIR.h +526 -235
  73. package/SVF-osx/include/MemoryModel/SVFStatements.h +872 -0
  74. package/SVF-osx/include/MemoryModel/SVFVariables.h +842 -0
  75. package/SVF-osx/include/MemoryModel/SymbolTableInfo.h +346 -55
  76. package/SVF-osx/include/SABER/SaberSVFGBuilder.h +0 -2
  77. package/SVF-osx/include/SABER/SrcSnkDDA.h +3 -3
  78. package/SVF-osx/include/SVF-FE/Graph2Json.h +1 -3
  79. package/SVF-osx/include/SVF-FE/SVFIRBuilder.h +398 -0
  80. package/SVF-osx/include/SVF-FE/SymbolTableBuilder.h +0 -1
  81. package/SVF-osx/include/Util/CFLSolver.h +1 -1
  82. package/SVF-osx/include/Util/ExtAPI.h +1 -1
  83. package/SVF-osx/include/Util/IRAnnotator.h +6 -6
  84. package/SVF-osx/include/Util/Options.h +1 -1
  85. package/SVF-osx/include/Util/TypeBasedHeapCloning.h +11 -11
  86. package/SVF-osx/include/WPA/Andersen.h +11 -11
  87. package/SVF-osx/include/WPA/AndersenSFR.h +4 -4
  88. package/SVF-osx/include/WPA/FlowSensitive.h +2 -2
  89. package/SVF-osx/include/WPA/FlowSensitiveTBHC.h +1 -1
  90. package/SVF-osx/include/WPA/Steensgaard.h +2 -2
  91. package/SVF-osx/include/WPA/TypeAnalysis.h +1 -1
  92. package/SVF-osx/include/WPA/VersionedFlowSensitive.h +2 -2
  93. package/SVF-osx/include/WPA/WPAStat.h +1 -2
  94. package/package.json +1 -1
@@ -30,12 +30,17 @@
30
30
  #ifndef INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_
31
31
  #define INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_
32
32
 
33
- #include "MemoryModel/SVFSymbols.h"
34
- #include "Util/SVFUtil.h"
35
33
 
34
+ #include "Util/SVFUtil.h"
35
+ #include "MemoryModel/LocationSet.h"
36
+ #include "Util/SVFModule.h"
36
37
  namespace SVF
37
38
  {
38
39
 
40
+ class MemObj;
41
+ class ObjTypeInfo;
42
+ class StInfo;
43
+
39
44
  /*!
40
45
  * Symbol table of the memory model for analysis
41
46
  */
@@ -44,17 +49,29 @@ class SymbolTableInfo
44
49
  friend class SymbolTableBuilder;
45
50
 
46
51
  public:
52
+
53
+ /// Symbol types
54
+ enum SYMTYPE
55
+ {
56
+ BlackHole,
57
+ ConstantObj,
58
+ BlkPtr,
59
+ NullPtr,
60
+ ValSymbol,
61
+ ObjSymbol,
62
+ RetSymbol,
63
+ VarargSymbol
64
+ };
65
+
47
66
  /// various maps defined
48
67
  //{@
49
68
  /// llvm value to sym id map
50
69
  /// local (%) and global (@) identifiers are pointer types which have a value node id.
51
70
  typedef OrderedMap<const Value *, SymID> ValueToIDMapTy;
52
71
  /// sym id to memory object map
53
- typedef OrderedMap<SymID,ObjSym*> IDToMemMapTy;
72
+ typedef OrderedMap<SymID,MemObj*> IDToMemMapTy;
54
73
  /// function to sym id map
55
74
  typedef OrderedMap<const Function *, SymID> FunToIDMapTy;
56
- /// sym id to sym type map
57
- typedef OrderedSet<const SVFVar*> SymSet;
58
75
  /// struct type to struct info map
59
76
  typedef OrderedMap<const Type*, StInfo*> TypeToFieldInfoMap;
60
77
  typedef Set<CallSite> CallSiteSet;
@@ -71,7 +88,6 @@ private:
71
88
  ValueToIDMapTy objSymMap; ///< map a obj reference to its sym id
72
89
  FunToIDMapTy returnSymMap; ///< return map
73
90
  FunToIDMapTy varargSymMap; ///< vararg map
74
- SymSet symSet; /// < a set of all symbols
75
91
  IDToMemMapTy objMap; ///< map a memory sym id to its obj
76
92
 
77
93
  CallSiteSet callSiteSet;
@@ -192,29 +208,15 @@ public:
192
208
  return (isBlkObj(id) || isConstantObj(id));
193
209
  }
194
210
 
195
- inline ObjSym* createBlkObj(SymID symId)
196
- {
197
- assert(isBlkObj(symId));
198
- assert(objMap.find(symId)==objMap.end());
199
- ObjSym* obj = new BlackHoleSym(symId, createObjTypeInfo());
200
- objMap[symId] = obj;
201
- return obj;
202
- }
211
+ MemObj* createBlkObj(SymID symId);
203
212
 
204
- inline ObjSym* createConstantObj(SymID symId)
205
- {
206
- assert(isConstantObj(symId));
207
- assert(objMap.find(symId)==objMap.end());
208
- ObjSym* obj = new ConstantObjSym(symId, createObjTypeInfo());
209
- objMap[symId] = obj;
210
- return obj;
211
- }
213
+ MemObj* createConstantObj(SymID symId);
212
214
 
213
- inline ObjSym* getBlkObj() const
215
+ inline MemObj* getBlkObj() const
214
216
  {
215
217
  return getObj(blackholeSymID());
216
218
  }
217
- inline ObjSym* getConstantObj() const
219
+ inline MemObj* getConstantObj() const
218
220
  {
219
221
  return getObj(constantSymID());
220
222
  }
@@ -239,15 +241,8 @@ public:
239
241
  return BlackHole;
240
242
  }
241
243
 
242
- /// Can only be invoked by PAG::addDummyNode() when creaing PAG from file.
243
- inline const ObjSym* createDummyObj(SymID symId, const Type* type)
244
- {
245
- assert(objMap.find(symId)==objMap.end() && "this dummy obj has been created before");
246
- ObjSym* memObj = new ObjSym(symId, createObjTypeInfo(type));
247
- objMap[symId] = memObj;
248
- symSet.insert(memObj);
249
- return memObj;
250
- }
244
+ /// Can only be invoked by SVFIR::addDummyNode() when creaing SVFIR from file.
245
+ const MemObj* createDummyObj(SymID symId, const Type* type);
251
246
  // @}
252
247
 
253
248
  /// Get different kinds of syms
@@ -282,7 +277,7 @@ public:
282
277
  return iter->second;
283
278
  }
284
279
 
285
- inline ObjSym* getObj(SymID id) const
280
+ inline MemObj* getObj(SymID id) const
286
281
  {
287
282
  IDToMemMapTy::const_iterator iter = objMap.find(id);
288
283
  assert(iter!=objMap.end() && "obj not found");
@@ -369,26 +364,11 @@ public:
369
364
  }
370
365
 
371
366
  ///Get a reference to the components of struct_info.
372
- const inline std::vector<u32_t>& getFattenFieldIdxVec(const Type *T)
373
- {
374
- return getStructInfoIter(T)->second->getFieldIdxVec();
375
- }
376
- const inline std::vector<u32_t>& getFattenFieldOffsetVec(const Type *T)
377
- {
378
- return getStructInfoIter(T)->second->getFieldOffsetVec();
379
- }
380
- const inline std::vector<FieldInfo>& getFlattenFieldInfoVec(const Type *T)
381
- {
382
- return getStructInfoIter(T)->second->getFlattenFieldInfoVec();
383
- }
384
- const inline Type* getOrigSubTypeWithFldInx(const Type* baseType, u32_t field_idx)
385
- {
386
- return getStructInfoIter(baseType)->second->getFieldTypeWithFldIdx(field_idx);
387
- }
388
- const inline Type* getOrigSubTypeWithByteOffset(const Type* baseType, u32_t byteOffset)
389
- {
390
- return getStructInfoIter(baseType)->second->getFieldTypeWithByteOffset(byteOffset);
391
- }
367
+ const std::vector<u32_t>& getFattenFieldIdxVec(const Type *T);
368
+ const std::vector<u32_t>& getFattenFieldOffsetVec(const Type *T);
369
+ const std::vector<FieldInfo>& getFlattenFieldInfoVec(const Type *T);
370
+ const Type* getOrigSubTypeWithFldInx(const Type* baseType, u32_t field_idx);
371
+ const Type* getOrigSubTypeWithByteOffset(const Type* baseType, u32_t byteOffset);
392
372
  //@}
393
373
 
394
374
  /// Compute gep offset
@@ -400,7 +380,7 @@ public:
400
380
  /// Collect type info
401
381
  void collectTypeInfo(const Type* T);
402
382
  /// Given an offset from a Gep Instruction, return it modulus offset by considering memory layout
403
- virtual LocationSet getModulusOffset(const ObjSym* obj, const LocationSet& ls);
383
+ virtual LocationSet getModulusOffset(const MemObj* obj, const LocationSet& ls);
404
384
 
405
385
  /// Debug method
406
386
  void printFlattenFields(const Type* type);
@@ -435,6 +415,317 @@ protected:
435
415
  };
436
416
 
437
417
 
418
+ /*!
419
+ * Memory object symbols or MemObj (address-taken variables in LLVM-based languages)
420
+ */
421
+ class MemObj
422
+ {
423
+
424
+ private:
425
+ /// Type information of this object
426
+ ObjTypeInfo* typeInfo;
427
+ /// The unique value of this symbol/variable
428
+ const Value *refVal;
429
+ /// The unique id to represent this symbol
430
+ SymID symId;
431
+ public:
432
+
433
+ /// Constructor
434
+ MemObj(SymID id, ObjTypeInfo* ti, const Value *val = nullptr);
435
+
436
+ /// Destructor
437
+ ~MemObj()
438
+ {
439
+ destroy();
440
+ }
441
+
442
+ virtual const std::string toString() const;
443
+
444
+ /// Get the reference value to this object
445
+ inline const Value* getValue() const
446
+ {
447
+ return refVal;
448
+ }
449
+
450
+ /// Get the memory object id
451
+ inline SymID getId() const
452
+ {
453
+ return symId;
454
+ }
455
+
456
+ /// Get obj type
457
+ const Type* getType() const;
458
+
459
+ /// Get max field offset limit
460
+ Size_t getMaxFieldOffsetLimit() const;
461
+
462
+ /// Return true if its field limit is 0
463
+ bool isFieldInsensitive() const;
464
+
465
+ /// Set the memory object to be field insensitive
466
+ void setFieldInsensitive();
467
+
468
+ /// Set the memory object to be field sensitive (up to max field limit)
469
+ void setFieldSensitive();
470
+
471
+ /// Whether it is a black hole object
472
+ bool isBlackHoleObj() const;
473
+
474
+ /// object attributes methods
475
+ //@{
476
+ bool isFunction() const;
477
+ bool isGlobalObj() const;
478
+ bool isStaticObj() const;
479
+ bool isStack() const;
480
+ bool isHeap() const;
481
+ bool isStruct() const;
482
+ bool isArray() const;
483
+ bool isVarStruct() const;
484
+ bool isVarArray() const;
485
+ bool isConstStruct() const;
486
+ bool isConstArray() const;
487
+ bool isConstant() const;
488
+ bool hasPtrObj() const;
489
+ bool isNonPtrFieldObj(const LocationSet& ls) const;
490
+ //@}
491
+
492
+ /// Operator overloading
493
+ inline bool operator==(const MemObj &mem) const
494
+ {
495
+ return getValue() == mem.getValue();
496
+ }
497
+
498
+ /// Clean up memory
499
+ void destroy();
500
+ };
501
+
502
+
503
+
504
+
505
+ /*!
506
+ * Struct information
507
+ */
508
+ class StInfo
509
+ {
510
+
511
+ private:
512
+ /// flattened field indices of a struct
513
+ std::vector<u32_t> fldIdxVec;
514
+ /// flattened field offsets of of a struct
515
+ std::vector<u32_t> foffset;
516
+ /// Types of all fields of a struct
517
+ Map<u32_t, const llvm::Type*> fldIdx2TypeMap;
518
+ /// Types of all fields of a struct
519
+ Map<u32_t, const llvm::Type*> offset2TypeMap;
520
+ /// All field infos after flattening a struct
521
+ std::vector<FieldInfo> finfo;
522
+
523
+ /// Max field limit
524
+ static u32_t maxFieldLimit;
525
+
526
+ public:
527
+ /// Constructor
528
+ StInfo()
529
+ {
530
+ }
531
+ /// Destructor
532
+ ~StInfo()
533
+ {
534
+ }
535
+
536
+ static inline void setMaxFieldLimit(u32_t limit)
537
+ {
538
+ maxFieldLimit = limit;
539
+ }
540
+
541
+ static inline u32_t getMaxFieldLimit()
542
+ {
543
+ return maxFieldLimit;
544
+ }
545
+
546
+ /// Get method for fields of a struct
547
+ //{@
548
+ inline const llvm::Type* getFieldTypeWithFldIdx(u32_t fldIdx)
549
+ {
550
+ return fldIdx2TypeMap[fldIdx];
551
+ }
552
+ inline const llvm::Type* getFieldTypeWithByteOffset(u32_t offset)
553
+ {
554
+ return offset2TypeMap[offset];
555
+ }
556
+ inline std::vector<u32_t>& getFieldIdxVec()
557
+ {
558
+ return fldIdxVec;
559
+ }
560
+ inline std::vector<u32_t>& getFieldOffsetVec()
561
+ {
562
+ return foffset;
563
+ }
564
+ inline std::vector<FieldInfo>& getFlattenFieldInfoVec()
565
+ {
566
+ return finfo;
567
+ }
568
+ //@}
569
+
570
+ /// Add field (index and offset) with its corresponding type
571
+ inline void addFldWithType(u32_t fldIdx, u32_t offset, const llvm::Type* type)
572
+ {
573
+ fldIdxVec.push_back(fldIdx);
574
+ foffset.push_back(offset);
575
+ fldIdx2TypeMap[fldIdx] = type;
576
+ offset2TypeMap[offset] = type;
577
+ }
578
+ };
579
+
580
+ /*!
581
+ * Type Info of an abstract memory object
582
+ */
583
+ class ObjTypeInfo
584
+ {
585
+
586
+ public:
587
+ typedef enum
588
+ {
589
+ FUNCTION_OBJ = 0x1, // object is a function
590
+ GLOBVAR_OBJ = 0x2, // object is a global variable
591
+ STATIC_OBJ = 0x4, // object is a static variable allocated before main
592
+ STACK_OBJ = 0x8, // object is a stack variable
593
+ HEAP_OBJ = 0x10, // object is a heap variable
594
+ VAR_STRUCT_OBJ = 0x20, // object contains struct
595
+ VAR_ARRAY_OBJ = 0x40, // object contains array
596
+ CONST_STRUCT_OBJ = 0x80, // constant struct
597
+ CONST_ARRAY_OBJ = 0x100, // constant array
598
+ CONST_OBJ = 0x200, // constant object str e.g.
599
+ HASPTR_OBJ = 0x400 // non pointer object including compound type have field that is a pointer type
600
+ } MEMTYPE;
601
+
602
+ private:
603
+ /// LLVM type
604
+ const Type* type;
605
+ /// Type flags
606
+ Size_t flags;
607
+ /// Max offset for flexible field sensitive analysis
608
+ /// maximum number of field object can be created
609
+ /// minimum number is 0 (field insensitive analysis)
610
+ u32_t maxOffsetLimit;
611
+ public:
612
+
613
+ /// Constructors
614
+ ObjTypeInfo(const Value*, const Type* t, u32_t max) :
615
+ type(t), flags(0), maxOffsetLimit(max)
616
+ {
617
+ }
618
+ /// Constructor
619
+ ObjTypeInfo(u32_t max, const Type* t) : type(t), flags(0), maxOffsetLimit(max)
620
+ {
621
+
622
+ }
623
+ /// Destructor
624
+ virtual ~ObjTypeInfo()
625
+ {
626
+
627
+ }
628
+
629
+ /// Analyse types of heap and static objects
630
+ void analyzeHeapObjType(const Type* type);
631
+
632
+ /// Analyse types of heap and static objects
633
+ void analyzeStaticObjType(const Type* type);
634
+
635
+ /// Get LLVM type
636
+ inline const Type* getType() const
637
+ {
638
+ return type;
639
+ }
640
+
641
+ /// Get max field offset limit
642
+ inline u32_t getMaxFieldOffsetLimit()
643
+ {
644
+ return maxOffsetLimit;
645
+ }
646
+
647
+ /// Get max field offset limit
648
+ inline void setMaxFieldOffsetLimit(u32_t limit)
649
+ {
650
+ maxOffsetLimit = limit;
651
+ }
652
+
653
+ /// Flag for this object type
654
+ //@{
655
+ inline void setFlag(MEMTYPE mask)
656
+ {
657
+ flags |= mask;
658
+ }
659
+ inline bool hasFlag(MEMTYPE mask)
660
+ {
661
+ return (flags & mask) == mask;
662
+ }
663
+ //@}
664
+
665
+ /// Object attributes
666
+ //@{
667
+ inline bool isFunction()
668
+ {
669
+ return hasFlag(FUNCTION_OBJ);
670
+ }
671
+ inline bool isGlobalObj()
672
+ {
673
+ return hasFlag(GLOBVAR_OBJ);
674
+ }
675
+ inline bool isStaticObj()
676
+ {
677
+ return hasFlag(STATIC_OBJ);
678
+ }
679
+ inline bool isStack()
680
+ {
681
+ return hasFlag(STACK_OBJ);
682
+ }
683
+ inline bool isHeap()
684
+ {
685
+ return hasFlag(HEAP_OBJ);
686
+ }
687
+ //@}
688
+
689
+ /// Object attributes (noted that an object can be a nested compound types)
690
+ /// e.g. both isStruct and isArray can return true
691
+ //@{
692
+ inline bool isVarStruct()
693
+ {
694
+ return hasFlag(VAR_STRUCT_OBJ);
695
+ }
696
+ inline bool isConstStruct()
697
+ {
698
+ return hasFlag(CONST_STRUCT_OBJ);
699
+ }
700
+ inline bool isStruct()
701
+ {
702
+ return hasFlag(VAR_STRUCT_OBJ) || hasFlag(CONST_STRUCT_OBJ);
703
+ }
704
+ inline bool isVarArray()
705
+ {
706
+ return hasFlag(VAR_ARRAY_OBJ);
707
+ }
708
+ inline bool isConstArray()
709
+ {
710
+ return hasFlag(CONST_ARRAY_OBJ);
711
+ }
712
+ inline bool isArray()
713
+ {
714
+ return hasFlag(VAR_ARRAY_OBJ) || hasFlag(CONST_ARRAY_OBJ);
715
+ }
716
+ inline bool isConstant()
717
+ {
718
+ return hasFlag(CONST_OBJ);
719
+ }
720
+ inline bool hasPtrObj()
721
+ {
722
+ return hasFlag(HASPTR_OBJ);
723
+ }
724
+ virtual bool isNonPtrFieldObj(const LocationSet& ls);
725
+ //@}
726
+ };
727
+
728
+
438
729
  } // End namespace SVF
439
730
 
440
731
  #endif /* INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_ */
@@ -37,8 +37,6 @@
37
37
  namespace SVF
38
38
  {
39
39
 
40
- class PAGNode;
41
-
42
40
  class SaberSVFGBuilder : public SVFGBuilder
43
41
  {
44
42
 
@@ -110,10 +110,10 @@ public:
110
110
  dumpSlices();
111
111
  }
112
112
 
113
- /// Get PAG
114
- PAG* getPAG() const
113
+ /// Get SVFIR
114
+ SVFIR* getPAG() const
115
115
  {
116
- return PAG::getPAG();
116
+ return SVFIR::getPAG();
117
117
  }
118
118
 
119
119
  /// Get SVFG
@@ -1,9 +1,7 @@
1
1
  #ifndef INCLUDE_SVF_FE_GRAPH2JSON_H_
2
2
  #define INCLUDE_SVF_FE_GRAPH2JSON_H_
3
3
 
4
- #include "Graphs/PAG.h"
5
- #include "Graphs/PAGEdge.h"
6
- #include "Graphs/PAGNode.h"
4
+ #include "MemoryModel/SVFIR.h"
7
5
  #include "Graphs/ICFG.h"
8
6
  #include "Graphs/ICFGNode.h"
9
7
  #include "Graphs/ICFGEdge.h"