svf-lib 1.0.730 → 1.0.734

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 (98) 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 +6 -6
  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/ICFGNode.h +14 -14
  11. package/SVF-linux/include/Graphs/IRGraph.h +245 -0
  12. package/SVF-linux/include/Graphs/OfflineConsG.h +1 -1
  13. package/SVF-linux/include/Graphs/PAG.h +4 -4
  14. package/SVF-linux/include/Graphs/PAGNode.h +3 -3
  15. package/SVF-linux/include/Graphs/SVFG.h +1 -1
  16. package/SVF-linux/include/Graphs/SVFGOPT.h +3 -3
  17. package/SVF-linux/include/Graphs/VFG.h +19 -19
  18. package/SVF-linux/include/Graphs/VFGNode.h +2 -3
  19. package/SVF-linux/include/MSSA/MemRegion.h +11 -11
  20. package/SVF-linux/include/MSSA/MemSSA.h +4 -4
  21. package/SVF-linux/include/MTA/FSMPTA.h +1 -1
  22. package/SVF-linux/include/MemoryModel/PAGBuilderFromFile.h +8 -8
  23. package/SVF-linux/include/MemoryModel/PTAStat.h +31 -31
  24. package/SVF-linux/include/MemoryModel/PointerAnalysis.h +9 -9
  25. package/SVF-linux/include/MemoryModel/PointerAnalysisImpl.h +3 -3
  26. package/SVF-linux/include/MemoryModel/SVFIR.h +591 -233
  27. package/SVF-linux/include/MemoryModel/SVFStatements.h +738 -0
  28. package/SVF-linux/include/MemoryModel/SVFSymbols.h +648 -0
  29. package/SVF-linux/include/MemoryModel/SVFVariables.h +842 -0
  30. package/SVF-linux/include/MemoryModel/SymbolTableInfo.h +343 -40
  31. package/SVF-linux/include/SABER/SaberSVFGBuilder.h +0 -2
  32. package/SVF-linux/include/SABER/SrcSnkDDA.h +3 -3
  33. package/SVF-linux/include/SVF-FE/Graph2Json.h +1 -3
  34. package/SVF-linux/include/SVF-FE/SVFIRBuilder.h +392 -0
  35. package/SVF-linux/include/SVF-FE/SymbolTableBuilder.h +0 -1
  36. package/SVF-linux/include/Util/CFLSolver.h +1 -1
  37. package/SVF-linux/include/Util/ExtAPI.h +1 -1
  38. package/SVF-linux/include/Util/IRAnnotator.h +6 -6
  39. package/SVF-linux/include/Util/Options.h +1 -1
  40. package/SVF-linux/include/Util/TypeBasedHeapCloning.h +11 -11
  41. package/SVF-linux/include/WPA/Andersen.h +11 -11
  42. package/SVF-linux/include/WPA/AndersenSFR.h +4 -4
  43. package/SVF-linux/include/WPA/FlowSensitive.h +2 -2
  44. package/SVF-linux/include/WPA/FlowSensitiveTBHC.h +1 -1
  45. package/SVF-linux/include/WPA/Steensgaard.h +2 -2
  46. package/SVF-linux/include/WPA/TypeAnalysis.h +1 -1
  47. package/SVF-linux/include/WPA/VersionedFlowSensitive.h +2 -2
  48. package/SVF-linux/include/WPA/WPAStat.h +1 -2
  49. package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
  50. package/SVF-osx/Release-build/lib/libSvf.a +0 -0
  51. package/SVF-osx/include/DDA/ContextDDA.h +1 -1
  52. package/SVF-osx/include/DDA/DDAClient.h +8 -8
  53. package/SVF-osx/include/DDA/DDAVFSolver.h +6 -6
  54. package/SVF-osx/include/DDA/FlowDDA.h +1 -1
  55. package/SVF-osx/include/Graphs/ConsG.h +6 -6
  56. package/SVF-osx/include/Graphs/ConsGEdge.h +2 -2
  57. package/SVF-osx/include/Graphs/ConsGNode.h +1 -1
  58. package/SVF-osx/include/Graphs/ExternalPAG.h +14 -14
  59. package/SVF-osx/include/Graphs/ICFGNode.h +14 -14
  60. package/SVF-osx/include/Graphs/IRGraph.h +245 -0
  61. package/SVF-osx/include/Graphs/OfflineConsG.h +1 -1
  62. package/SVF-osx/include/Graphs/PAG.h +4 -4
  63. package/SVF-osx/include/Graphs/PAGNode.h +3 -3
  64. package/SVF-osx/include/Graphs/SVFG.h +1 -1
  65. package/SVF-osx/include/Graphs/SVFGOPT.h +3 -3
  66. package/SVF-osx/include/Graphs/VFG.h +19 -19
  67. package/SVF-osx/include/Graphs/VFGNode.h +2 -3
  68. package/SVF-osx/include/MSSA/MemRegion.h +11 -11
  69. package/SVF-osx/include/MSSA/MemSSA.h +4 -4
  70. package/SVF-osx/include/MTA/FSMPTA.h +1 -1
  71. package/SVF-osx/include/MemoryModel/PAGBuilderFromFile.h +8 -8
  72. package/SVF-osx/include/MemoryModel/PTAStat.h +31 -31
  73. package/SVF-osx/include/MemoryModel/PointerAnalysis.h +9 -9
  74. package/SVF-osx/include/MemoryModel/PointerAnalysisImpl.h +3 -3
  75. package/SVF-osx/include/MemoryModel/SVFIR.h +591 -233
  76. package/SVF-osx/include/MemoryModel/SVFStatements.h +738 -0
  77. package/SVF-osx/include/MemoryModel/SVFSymbols.h +648 -0
  78. package/SVF-osx/include/MemoryModel/SVFVariables.h +842 -0
  79. package/SVF-osx/include/MemoryModel/SymbolTableInfo.h +343 -40
  80. package/SVF-osx/include/SABER/SaberSVFGBuilder.h +0 -2
  81. package/SVF-osx/include/SABER/SrcSnkDDA.h +3 -3
  82. package/SVF-osx/include/SVF-FE/Graph2Json.h +1 -3
  83. package/SVF-osx/include/SVF-FE/SVFIRBuilder.h +392 -0
  84. package/SVF-osx/include/SVF-FE/SymbolTableBuilder.h +0 -1
  85. package/SVF-osx/include/Util/CFLSolver.h +1 -1
  86. package/SVF-osx/include/Util/ExtAPI.h +1 -1
  87. package/SVF-osx/include/Util/IRAnnotator.h +6 -6
  88. package/SVF-osx/include/Util/Options.h +1 -1
  89. package/SVF-osx/include/Util/TypeBasedHeapCloning.h +11 -11
  90. package/SVF-osx/include/WPA/Andersen.h +11 -11
  91. package/SVF-osx/include/WPA/AndersenSFR.h +4 -4
  92. package/SVF-osx/include/WPA/FlowSensitive.h +2 -2
  93. package/SVF-osx/include/WPA/FlowSensitiveTBHC.h +1 -1
  94. package/SVF-osx/include/WPA/Steensgaard.h +2 -2
  95. package/SVF-osx/include/WPA/TypeAnalysis.h +1 -1
  96. package/SVF-osx/include/WPA/VersionedFlowSensitive.h +2 -2
  97. package/SVF-osx/include/WPA/WPAStat.h +1 -2
  98. 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/MemModel.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,6 +49,20 @@ 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
@@ -53,8 +72,6 @@ public:
53
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 OrderedMap<SymID,SYMTYPE> IDToSymTyMapTy;
58
75
  /// struct type to struct info map
59
76
  typedef OrderedMap<const Type*, StInfo*> TypeToFieldInfoMap;
60
77
  typedef Set<CallSite> CallSiteSet;
@@ -69,10 +86,9 @@ private:
69
86
 
70
87
  ValueToIDMapTy valSymMap; ///< map a value to its sym id
71
88
  ValueToIDMapTy objSymMap; ///< map a obj reference to its sym id
72
- IDToMemMapTy objMap; ///< map a memory sym id to its obj
73
- IDToSymTyMapTy symTyMap; /// < map a sym id to its type
74
89
  FunToIDMapTy returnSymMap; ///< return map
75
90
  FunToIDMapTy varargSymMap; ///< vararg map
91
+ IDToMemMapTy objMap; ///< map a memory sym id to its obj
76
92
 
77
93
  CallSiteSet callSiteSet;
78
94
 
@@ -192,12 +208,9 @@ public:
192
208
  return (isBlkObj(id) || isConstantObj(id));
193
209
  }
194
210
 
195
- inline void createBlkOrConstantObj(SymID symId)
196
- {
197
- assert(isBlkObjOrConstantObj(symId));
198
- assert(objMap.find(symId)==objMap.end());
199
- objMap[symId] = new MemObj(symId, createObjTypeInfo());;
200
- }
211
+ MemObj* createBlkObj(SymID symId);
212
+
213
+ MemObj* createConstantObj(SymID symId);
201
214
 
202
215
  inline MemObj* getBlkObj() const
203
216
  {
@@ -228,14 +241,8 @@ public:
228
241
  return BlackHole;
229
242
  }
230
243
 
231
- /// Can only be invoked by PAG::addDummyNode() when creaing PAG from file.
232
- inline const MemObj* createDummyObj(SymID symId, const Type* type)
233
- {
234
- assert(objMap.find(symId)==objMap.end() && "this dummy obj has been created before");
235
- MemObj* memObj = new MemObj(symId, createObjTypeInfo(type));
236
- objMap[symId] = memObj;
237
- return memObj;
238
- }
244
+ /// Can only be invoked by SVFIR::addDummyNode() when creaing SVFIR from file.
245
+ const MemObj* createDummyObj(SymID symId, const Type* type);
239
246
  // @}
240
247
 
241
248
  /// Get different kinds of syms
@@ -357,26 +364,11 @@ public:
357
364
  }
358
365
 
359
366
  ///Get a reference to the components of struct_info.
360
- const inline std::vector<u32_t>& getFattenFieldIdxVec(const Type *T)
361
- {
362
- return getStructInfoIter(T)->second->getFieldIdxVec();
363
- }
364
- const inline std::vector<u32_t>& getFattenFieldOffsetVec(const Type *T)
365
- {
366
- return getStructInfoIter(T)->second->getFieldOffsetVec();
367
- }
368
- const inline std::vector<FieldInfo>& getFlattenFieldInfoVec(const Type *T)
369
- {
370
- return getStructInfoIter(T)->second->getFlattenFieldInfoVec();
371
- }
372
- const inline Type* getOrigSubTypeWithFldInx(const Type* baseType, u32_t field_idx)
373
- {
374
- return getStructInfoIter(baseType)->second->getFieldTypeWithFldIdx(field_idx);
375
- }
376
- const inline Type* getOrigSubTypeWithByteOffset(const Type* baseType, u32_t byteOffset)
377
- {
378
- return getStructInfoIter(baseType)->second->getFieldTypeWithByteOffset(byteOffset);
379
- }
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);
380
372
  //@}
381
373
 
382
374
  /// Compute gep offset
@@ -423,6 +415,317 @@ protected:
423
415
  };
424
416
 
425
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
+
426
729
  } // End namespace SVF
427
730
 
428
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"