svf-lib 1.0.2535 → 1.0.2537

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
Binary file
Binary file
@@ -42,6 +42,8 @@
42
42
  #include <llvm/IR/DerivedTypes.h>
43
43
  #include <llvm/IR/Statepoint.h>
44
44
  #include <llvm/IR/Intrinsics.h>
45
+ #include <llvm/IR/InlineAsm.h>
46
+ #include <llvm/IR/Constants.h>
45
47
 
46
48
  #include <llvm/Analysis/MemoryLocation.h>
47
49
  #include <llvm/Analysis/DominanceFrontier.h>
@@ -127,6 +129,9 @@ typedef llvm::Constant Constant;
127
129
  typedef llvm::ConstantInt ConstantInt;
128
130
  typedef llvm::ConstantFP ConstantFP;
129
131
  typedef llvm::ConstantPointerNull ConstantPointerNull;
132
+ typedef llvm::InlineAsm InlineAsm;
133
+ typedef llvm::DSOLocalEquivalent DSOLocalEquivalent;
134
+ typedef llvm::NoCFIValue NoCFIValue;
130
135
  typedef llvm::GlobalAlias GlobalAlias;
131
136
  typedef llvm::GlobalIFunc GlobalIFunc;
132
137
  typedef llvm::GlobalVariable GlobalVariable;
@@ -837,6 +837,18 @@ private:
837
837
  {
838
838
  return addDummyValNode(getBlkPtr(), nullptr);
839
839
  }
840
+ inline NodeID addIntrinsicValNode(NodeID i, const SVFType* type)
841
+ {
842
+ return addValNode(new IntrinsicValVar(i, type));
843
+ }
844
+ inline NodeID addBasicBlockValNode(NodeID i, const SVFType* type)
845
+ {
846
+ return addValNode(new BasicBlockValVar(i, type));
847
+ }
848
+ inline NodeID addAsmPCValNode(NodeID i, const SVFType* type)
849
+ {
850
+ return addValNode(new AsmPCValVar(i, type));
851
+ }
840
852
  //@}
841
853
 
842
854
  /// Add a value (pointer) node
@@ -80,6 +80,9 @@ public:
80
80
  ConstNullptrValNode, // │ └── Represents a constant nullptr value node
81
81
  // │ └─ Subclass: DummyValVar
82
82
  DummyValNode, // │ └── Dummy node for uninitialized values
83
+ IntrinsicValNode, // │ └── LLVM intrinsic call instruction (e.g. llvm.dbg.declare)
84
+ BasicBlockValNode, // │ └── LLVM BasicBlock (label operand of br/switch)
85
+ AsmPCValNode, // │ └── InlineAsm, DSOLocalEquivalent, NoCFIValue
83
86
 
84
87
  // └─ Subclass: ObjVar (Object variable nodes)
85
88
  ObjNode, // ├── Represents an object variable
@@ -230,7 +233,7 @@ protected:
230
233
 
231
234
  static inline bool isSVFVarKind(GNodeK n)
232
235
  {
233
- static_assert(DummyObjNode - ValNode == 26,
236
+ static_assert(DummyObjNode - ValNode == 29,
234
237
  "The number of SVFVarKinds has changed, make sure the "
235
238
  "range is correct");
236
239
 
@@ -239,10 +242,10 @@ protected:
239
242
 
240
243
  static inline bool isValVarKinds(GNodeK n)
241
244
  {
242
- static_assert(DummyValNode - ValNode == 13,
245
+ static_assert(AsmPCValNode - ValNode == 16,
243
246
  "The number of ValVarKinds has changed, make sure the "
244
247
  "range is correct");
245
- return n <= DummyValNode && n >= ValNode;
248
+ return n <= AsmPCValNode && n >= ValNode;
246
249
  }
247
250
 
248
251
 
@@ -283,10 +283,7 @@ public:
283
283
  //@}
284
284
 
285
285
  /// Constructor
286
- ValVar(NodeID i, const SVFType* svfType, const ICFGNode* node, PNODEK ty = ValNode)
287
- : SVFVar(i, svfType, ty), icfgNode(node)
288
- {
289
- }
286
+ ValVar(NodeID i, const SVFType* svfType, const ICFGNode* node, PNODEK ty = ValNode);
290
287
  /// Return name of a LLVM value
291
288
  inline const std::string getValueName() const
292
289
  {
@@ -2111,6 +2108,8 @@ public:
2111
2108
  VarArgValPN(NodeID i, const FunObjVar* node, const SVFType* svfType, const ICFGNode* icn)
2112
2109
  : ValVar(i, svfType, icn, VarargValNode), callGraphNode(node)
2113
2110
  {
2111
+ assert((node->isDeclaration() || icn) &&
2112
+ "VarArgValPN of a defined function must have a valid ICFGNode");
2114
2113
  }
2115
2114
 
2116
2115
  virtual const FunObjVar* getFunction() const;
@@ -2176,6 +2175,133 @@ public:
2176
2175
  virtual const std::string toString() const;
2177
2176
  };
2178
2177
 
2178
+ /*
2179
+ * Represents an LLVM intrinsic call instruction (e.g. llvm.dbg.declare).
2180
+ * These are collected into valSyms but have no corresponding ICFGNode.
2181
+ */
2182
+ class IntrinsicValVar: public ValVar
2183
+ {
2184
+ friend class GraphDBClient;
2185
+
2186
+ public:
2187
+ //@{ Methods for support type inquiry through isa, cast, and dyn_cast:
2188
+ static inline bool classof(const IntrinsicValVar*)
2189
+ {
2190
+ return true;
2191
+ }
2192
+ static inline bool classof(const SVFVar* node)
2193
+ {
2194
+ return node->getNodeKind() == SVFVar::IntrinsicValNode;
2195
+ }
2196
+ static inline bool classof(const ValVar* node)
2197
+ {
2198
+ return node->getNodeKind() == SVFVar::IntrinsicValNode;
2199
+ }
2200
+ static inline bool classof(const GenericPAGNodeTy* node)
2201
+ {
2202
+ return node->getNodeKind() == SVFVar::IntrinsicValNode;
2203
+ }
2204
+ static inline bool classof(const SVFValue* node)
2205
+ {
2206
+ return node->getNodeKind() == SVFVar::IntrinsicValNode;
2207
+ }
2208
+ //@}
2209
+
2210
+ IntrinsicValVar(NodeID i, const SVFType* svfType)
2211
+ : ValVar(i, svfType, nullptr, IntrinsicValNode)
2212
+ {
2213
+ }
2214
+
2215
+ inline const std::string getValueName() const
2216
+ {
2217
+ return "intrinsicVal";
2218
+ }
2219
+
2220
+ virtual const std::string toString() const;
2221
+ };
2222
+
2223
+ /*
2224
+ * Represents an LLVM BasicBlock (label operand of br/switch).
2225
+ * Collected into valSyms as a branch operand but has no ICFGNode.
2226
+ */
2227
+ class BasicBlockValVar: public ValVar
2228
+ {
2229
+ friend class GraphDBClient;
2230
+
2231
+ public:
2232
+ static inline bool classof(const BasicBlockValVar*)
2233
+ {
2234
+ return true;
2235
+ }
2236
+ static inline bool classof(const SVFVar* node)
2237
+ {
2238
+ return node->getNodeKind() == SVFVar::BasicBlockValNode;
2239
+ }
2240
+ static inline bool classof(const ValVar* node)
2241
+ {
2242
+ return node->getNodeKind() == SVFVar::BasicBlockValNode;
2243
+ }
2244
+ static inline bool classof(const GenericPAGNodeTy* node)
2245
+ {
2246
+ return node->getNodeKind() == SVFVar::BasicBlockValNode;
2247
+ }
2248
+ static inline bool classof(const SVFValue* node)
2249
+ {
2250
+ return node->getNodeKind() == SVFVar::BasicBlockValNode;
2251
+ }
2252
+
2253
+ BasicBlockValVar(NodeID i, const SVFType* svfType)
2254
+ : ValVar(i, svfType, nullptr, BasicBlockValNode) {}
2255
+
2256
+ inline const std::string getValueName() const
2257
+ {
2258
+ return "basicBlockVal";
2259
+ }
2260
+ virtual const std::string toString() const;
2261
+ };
2262
+
2263
+ /*
2264
+ * Represents InlineAsm, DSOLocalEquivalent, and NoCFIValue.
2265
+ * These are non-instruction values related to inline assembly,
2266
+ * position-independent code (PIC), or control-flow integrity (CFI).
2267
+ * They have no corresponding ICFGNode.
2268
+ */
2269
+ class AsmPCValVar: public ValVar
2270
+ {
2271
+ friend class GraphDBClient;
2272
+
2273
+ public:
2274
+ static inline bool classof(const AsmPCValVar*)
2275
+ {
2276
+ return true;
2277
+ }
2278
+ static inline bool classof(const SVFVar* node)
2279
+ {
2280
+ return node->getNodeKind() == SVFVar::AsmPCValNode;
2281
+ }
2282
+ static inline bool classof(const ValVar* node)
2283
+ {
2284
+ return node->getNodeKind() == SVFVar::AsmPCValNode;
2285
+ }
2286
+ static inline bool classof(const GenericPAGNodeTy* node)
2287
+ {
2288
+ return node->getNodeKind() == SVFVar::AsmPCValNode;
2289
+ }
2290
+ static inline bool classof(const SVFValue* node)
2291
+ {
2292
+ return node->getNodeKind() == SVFVar::AsmPCValNode;
2293
+ }
2294
+
2295
+ AsmPCValVar(NodeID i, const SVFType* svfType)
2296
+ : ValVar(i, svfType, nullptr, AsmPCValNode) {}
2297
+
2298
+ inline const std::string getValueName() const
2299
+ {
2300
+ return "asmPCVal";
2301
+ }
2302
+ virtual const std::string toString() const;
2303
+ };
2304
+
2179
2305
  /*
2180
2306
  * Dummy object variable
2181
2307
  */
package/SVF-osx/bin/ae CHANGED
Binary file
package/SVF-osx/bin/cfl CHANGED
Binary file
package/SVF-osx/bin/dvf CHANGED
Binary file
package/SVF-osx/bin/mta CHANGED
Binary file
package/SVF-osx/bin/saber CHANGED
Binary file
Binary file
package/SVF-osx/bin/wpa CHANGED
Binary file
@@ -597,13 +597,11 @@ protected:
597
597
  /// do not set def here, this node is not a variable definition
598
598
  }
599
599
  /// Add a formal parameter VFG node
600
- inline void addFormalParmVFGNode(const ValVar* fparm, const FunObjVar* fun, CallPESet& callPEs)
600
+ inline void addFormalParmVFGNode(const ValVar* fparm, const FunObjVar* fun, const CallPE* callPE)
601
601
  {
602
602
  FormalParmVFGNode* sNode = new FormalParmVFGNode(totalVFGNode++,fparm,fun);
603
603
  addVFGNode(sNode, pag->getICFG()->getFunEntryICFGNode(fun));
604
- for(CallPESet::const_iterator it = callPEs.begin(), eit=callPEs.end();
605
- it!=eit; ++it)
606
- sNode->addCallPE(*it);
604
+ sNode->setCallPE(callPE);
607
605
 
608
606
  setDef(fparm,sNode);
609
607
  SVFVarToFormalParmMap[fparm] = sNode;
@@ -1028,12 +1028,12 @@ class FormalParmVFGNode : public ArgumentVFGNode
1028
1028
  {
1029
1029
  private:
1030
1030
  const FunObjVar* fun;
1031
- CallPESet callPEs;
1031
+ const CallPE* callPE;
1032
1032
 
1033
1033
  public:
1034
1034
  /// Constructor
1035
1035
  FormalParmVFGNode(NodeID id, const ValVar* n, const FunObjVar* f):
1036
- ArgumentVFGNode(id, n, FParm), fun(f)
1036
+ ArgumentVFGNode(id, n, FParm), fun(f), callPE(nullptr)
1037
1037
  {
1038
1038
  }
1039
1039
 
@@ -1048,20 +1048,15 @@ public:
1048
1048
  {
1049
1049
  return fun;
1050
1050
  }
1051
- /// Return call edge
1052
- inline void addCallPE(const CallPE* call)
1051
+ /// Set the (single, phi-like) CallPE for this formal parameter
1052
+ inline void setCallPE(const CallPE* call)
1053
1053
  {
1054
- callPEs.insert(call);
1054
+ callPE = call;
1055
1055
  }
1056
- /// Call edge iterator
1057
- ///@{
1058
- inline CallPESet::const_iterator callPEBegin() const
1059
- {
1060
- return callPEs.begin();
1061
- }
1062
- inline CallPESet::const_iterator callPEEnd() const
1056
+ /// Return the CallPE (phi-like, merges all actual params)
1057
+ inline const CallPE* getCallPE() const
1063
1058
  {
1064
- return callPEs.end();
1059
+ return callPE;
1065
1060
  }
1066
1061
  //@}
1067
1062
 
@@ -57,6 +57,7 @@ public:
57
57
  typedef std::vector<const SVFStmt*> SVFStmtList;
58
58
  typedef std::vector<const ValVar*> ValVarList;
59
59
  typedef Map<const SVFVar*,PhiStmt*> PHINodeMap;
60
+ typedef Map<const SVFVar*,CallPE*> FParmToCallPEMap;
60
61
  typedef Map<const FunObjVar*,ValVarList> FunToArgsListMap;
61
62
  typedef Map<const CallICFGNode*,ValVarList> CSToArgsListMap;
62
63
  typedef Map<const RetICFGNode*,const ValVar*> CSToRetMap;
@@ -84,6 +85,7 @@ private:
84
85
  MemObjToFieldsMap memToFieldsMap; ///< Map a mem object id to all its fields
85
86
  SVFStmtSet globSVFStmtSet; ///< Global PAGEdges without control flow information
86
87
  PHINodeMap phiNodeMap; ///< A set of phi copy edges
88
+ FParmToCallPEMap fParmToCallPEMap; ///< Map a formal param to its CallPE
87
89
  FunToArgsListMap funArgsListMap; ///< Map a function to a list of all its formal parameters
88
90
  CSToArgsListMap callSiteArgsListMap; ///< Map a callsite to a list of all its actual parameters
89
91
  CSToRetMap callSiteRetMap; ///< Map a callsite to its callsite returns PAGNodes
@@ -353,6 +355,12 @@ public:
353
355
  {
354
356
  return phiNodeMap.find(node) != phiNodeMap.end();
355
357
  }
358
+ /// Get the CallPE for a formal parameter (phi-like, nullptr if not found)
359
+ inline CallPE* getCallPEForFormalParm(const SVFVar* param) const
360
+ {
361
+ auto it = fParmToCallPEMap.find(param);
362
+ return it != fParmToCallPEMap.end() ? it->second : nullptr;
363
+ }
356
364
 
357
365
  /// Function has arguments list
358
366
  inline bool hasFunArgsList(const FunObjVar* func) const
@@ -911,7 +919,7 @@ private:
911
919
  /// Add Store edge
912
920
  StoreStmt* addStoreStmt(NodeID src, NodeID dst, const ICFGNode* val);
913
921
  void addStoreStmt(StoreStmt* edge, SVFVar* src, SVFVar* dst);
914
- /// Add Call edge
922
+ /// Add Call edge (phi-like: merges actual params from all call sites into formal param)
915
923
  CallPE* addCallPE(NodeID src, NodeID dst, const CallICFGNode* cs,
916
924
  const FunEntryICFGNode* entry);
917
925
  void addCallPE(CallPE* edge, SVFVar* src, SVFVar* dst);
@@ -335,10 +335,8 @@ public:
335
335
  edge->getEdgeKind() == SVFStmt::Copy ||
336
336
  edge->getEdgeKind() == SVFStmt::Store ||
337
337
  edge->getEdgeKind() == SVFStmt::Load ||
338
- edge->getEdgeKind() == SVFStmt::Call ||
339
338
  edge->getEdgeKind() == SVFStmt::Ret ||
340
339
  edge->getEdgeKind() == SVFStmt::Gep ||
341
- edge->getEdgeKind() == SVFStmt::ThreadFork ||
342
340
  edge->getEdgeKind() == SVFStmt::ThreadJoin;
343
341
  }
344
342
  static inline bool classof(const GenericPAGEdgeTy* edge)
@@ -347,10 +345,8 @@ public:
347
345
  edge->getEdgeKind() == SVFStmt::Copy ||
348
346
  edge->getEdgeKind() == SVFStmt::Store ||
349
347
  edge->getEdgeKind() == SVFStmt::Load ||
350
- edge->getEdgeKind() == SVFStmt::Call ||
351
348
  edge->getEdgeKind() == SVFStmt::Ret ||
352
349
  edge->getEdgeKind() == SVFStmt::Gep ||
353
- edge->getEdgeKind() == SVFStmt::ThreadFork ||
354
350
  edge->getEdgeKind() == SVFStmt::ThreadJoin;
355
351
  }
356
352
  //@}
@@ -693,67 +689,6 @@ public:
693
689
  };
694
690
 
695
691
 
696
- /*!
697
- * Call
698
- */
699
- class CallPE: public AssignStmt
700
- {
701
- friend class GraphDBClient;
702
-
703
- private:
704
- CallPE(const CallPE&); ///< place holder
705
- void operator=(const CallPE&); ///< place holder
706
-
707
- const CallICFGNode* call; /// the callsite statement calling from
708
- const FunEntryICFGNode* entry; /// the function exit statement calling to
709
-
710
- public:
711
- /// Methods for support type inquiry through isa, cast, and dyn_cast:
712
- //@{
713
- static inline bool classof(const CallPE*)
714
- {
715
- return true;
716
- }
717
- static inline bool classof(const SVFStmt* edge)
718
- {
719
- return edge->getEdgeKind() == SVFStmt::Call ||
720
- edge->getEdgeKind() == SVFStmt::ThreadFork;
721
- }
722
- static inline bool classof(const GenericPAGEdgeTy* edge)
723
- {
724
- return edge->getEdgeKind() == SVFStmt::Call ||
725
- edge->getEdgeKind() == SVFStmt::ThreadFork;
726
- }
727
- //@}
728
-
729
- /// constructor
730
- CallPE(SVFVar* s, SVFVar* d, const CallICFGNode* i,
731
- const FunEntryICFGNode* e, GEdgeKind k = SVFStmt::Call);
732
-
733
- /// Get method for the call instruction
734
- //@{
735
- inline const CallICFGNode* getCallInst() const
736
- {
737
- return call;
738
- }
739
- inline const CallICFGNode* getCallSite() const
740
- {
741
- return call;
742
- }
743
- inline const FunEntryICFGNode* getFunEntryICFGNode() const
744
- {
745
- return entry;
746
- }
747
- //@}
748
-
749
- const ValVar* getRHSVar() const;
750
- const ValVar* getLHSVar() const;
751
- const ValVar* getSrcNode() const;
752
- const ValVar* getDstNode() const;
753
-
754
- virtual const std::string toString() const override;
755
- };
756
-
757
692
  /*!
758
693
  * Return
759
694
  */
@@ -850,12 +785,14 @@ public:
850
785
  static inline bool classof(const SVFStmt* node)
851
786
  {
852
787
  return node->getEdgeKind() == Phi || node->getEdgeKind() == Select ||
853
- node->getEdgeKind() == BinaryOp || node->getEdgeKind() == Cmp;
788
+ node->getEdgeKind() == BinaryOp || node->getEdgeKind() == Cmp ||
789
+ node->getEdgeKind() == Call || node->getEdgeKind() == ThreadFork;
854
790
  }
855
791
  static inline bool classof(const GenericPAGEdgeTy* node)
856
792
  {
857
793
  return node->getEdgeKind() == Phi || node->getEdgeKind() == Select ||
858
- node->getEdgeKind() == BinaryOp || node->getEdgeKind() == Cmp;
794
+ node->getEdgeKind() == BinaryOp || node->getEdgeKind() == Cmp ||
795
+ node->getEdgeKind() == Call || node->getEdgeKind() == ThreadFork;
859
796
  }
860
797
  //@}
861
798
  /// Operands and result at a BinaryNode e.g., p = q + r, `p` is resVar and
@@ -891,6 +828,81 @@ public:
891
828
  //@}
892
829
  };
893
830
 
831
+ /*!
832
+ * Call
833
+ * CallPE is a phi-like statement at function entry that merges actual parameters
834
+ * from all call sites into the formal parameter.
835
+ * e.g., formal_param = CallPE(actual1@callsite1, actual2@callsite2, ...)
836
+ */
837
+ class CallPE: public MultiOpndStmt
838
+ {
839
+ friend class GraphDBClient;
840
+
841
+ public:
842
+ typedef std::vector<const CallICFGNode*> CallICFGNodeVec;
843
+
844
+ private:
845
+ CallPE(const CallPE&); ///< place holder
846
+ void operator=(const CallPE&); ///< place holder
847
+
848
+ CallICFGNodeVec opCallICFGNodes; /// each operand's call site
849
+ const FunEntryICFGNode* entry; /// the function entry node
850
+
851
+ public:
852
+ /// Methods for support type inquiry through isa, cast, and dyn_cast:
853
+ //@{
854
+ static inline bool classof(const CallPE*)
855
+ {
856
+ return true;
857
+ }
858
+ static inline bool classof(const SVFStmt* edge)
859
+ {
860
+ return edge->getEdgeKind() == SVFStmt::Call ||
861
+ edge->getEdgeKind() == SVFStmt::ThreadFork;
862
+ }
863
+ static inline bool classof(const GenericPAGEdgeTy* edge)
864
+ {
865
+ return edge->getEdgeKind() == SVFStmt::Call ||
866
+ edge->getEdgeKind() == SVFStmt::ThreadFork;
867
+ }
868
+ //@}
869
+
870
+ /// constructor
871
+ CallPE(ValVar* res, const OPVars& opnds,
872
+ const CallICFGNodeVec& icfgNodes,
873
+ const FunEntryICFGNode* e,
874
+ GEdgeKind k = SVFStmt::Call);
875
+
876
+ /// Add an operand (actual param) from a call site
877
+ void addOpVar(ValVar* op, const CallICFGNode* call)
878
+ {
879
+ opVars.push_back(op);
880
+ opCallICFGNodes.push_back(call);
881
+ assert(opVars.size() == opCallICFGNodes.size() &&
882
+ "Numbers of operands and their CallICFGNodes are not consistent?");
883
+ }
884
+
885
+ /// Return the CallICFGNode of the i-th operand
886
+ inline const CallICFGNode* getOpCallICFGNode(u32_t op_idx) const
887
+ {
888
+ return opCallICFGNodes.at(op_idx);
889
+ }
890
+
891
+ /// Return all call site ICFGNodes
892
+ inline const CallICFGNodeVec& getOpCallICFGNodes() const
893
+ {
894
+ return opCallICFGNodes;
895
+ }
896
+
897
+ /// Return the function entry node
898
+ inline const FunEntryICFGNode* getFunEntryICFGNode() const
899
+ {
900
+ return entry;
901
+ }
902
+
903
+ virtual const std::string toString() const override;
904
+ };
905
+
894
906
  /*!
895
907
  * Phi statement (e.g., p = phi(q,r) which receives values from variables q and r from different paths)
896
908
  * it is typically at a joint point of the control-flow graph
@@ -1340,17 +1352,13 @@ public:
1340
1352
  //@}
1341
1353
 
1342
1354
  /// constructor
1343
- TDForkPE(SVFVar* s, SVFVar* d, const CallICFGNode* i,
1344
- const FunEntryICFGNode* entry)
1345
- : CallPE(s, d, i, entry, SVFStmt::ThreadFork)
1355
+ TDForkPE(ValVar* res, const OPVars& opnds,
1356
+ const CallICFGNodeVec& icfgNodes,
1357
+ const FunEntryICFGNode* e)
1358
+ : CallPE(res, opnds, icfgNodes, e, SVFStmt::ThreadFork)
1346
1359
  {
1347
1360
  }
1348
1361
 
1349
- const ValVar* getRHSVar() const;
1350
- const ValVar* getLHSVar() const;
1351
- const ValVar* getSrcNode() const;
1352
- const ValVar* getDstNode() const;
1353
-
1354
1362
  virtual const std::string toString() const;
1355
1363
 
1356
1364
  };
@@ -7,7 +7,7 @@ if(CMAKE_VERSION VERSION_LESS "3.0.0")
7
7
  message(FATAL_ERROR "CMake >= 3.0.0 required")
8
8
  endif()
9
9
  cmake_policy(PUSH)
10
- cmake_policy(VERSION 3.0.0...4.0)
10
+ cmake_policy(VERSION 3.0.0...4.1)
11
11
  #----------------------------------------------------------------
12
12
  # Generated CMake target import file.
13
13
  #----------------------------------------------------------------
@@ -65,7 +65,7 @@ set_target_properties(SVF::SvfFlags PROPERTIES
65
65
  INTERFACE_LINK_DIRECTORIES "${_IMPORT_PREFIX}/lib"
66
66
  INTERFACE_LINK_LIBRARIES "z3::libz3"
67
67
  INTERFACE_LINK_OPTIONS "\$<\$<NOT:\$<BOOL:ON>>:-fno-rtti>"
68
- INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "include;include"
68
+ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
69
69
  )
70
70
 
71
71
  # Create imported target SVF::SvfCore
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.2535",
3
+ "version": "1.0.2537",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {