svf-tools 1.0.1066 → 1.0.1068

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.1066",
3
+ "version": "1.0.1068",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -324,10 +324,11 @@ class SVFFunctionType : public SVFType
324
324
  private:
325
325
  const SVFType* retTy;
326
326
  std::vector<const SVFType*> params;
327
+ bool varArg;
327
328
 
328
329
  public:
329
- SVFFunctionType(const SVFType* rt, const std::vector<const SVFType*>& p)
330
- : SVFType(false, SVFFunctionTy, 1), retTy(rt), params(p)
330
+ SVFFunctionType(const SVFType* rt, const std::vector<const SVFType*>& p, bool isvararg)
331
+ : SVFType(false, SVFFunctionTy, 1), retTy(rt), params(p), varArg(isvararg)
331
332
  {
332
333
  }
333
334
 
@@ -345,6 +346,11 @@ public:
345
346
  return params;
346
347
  }
347
348
 
349
+
350
+ bool isVarArg() const {
351
+ return varArg;
352
+ }
353
+
348
354
  void print(std::ostream& os) const override;
349
355
  };
350
356
 
@@ -93,7 +93,8 @@ const FunObjVar *CallGraph::getCallerOfCallSite(CallSiteID id) const
93
93
  bool CallGraphNode::isReachableFromProgEntry(Map<NodeID, bool> &reachableFromEntry, NodeBS &visitedNodes) const
94
94
  {
95
95
  std::function<bool(const CallGraphNode*)> dfs =
96
- [&reachableFromEntry, &visitedNodes, &dfs](const CallGraphNode *v) {
96
+ [&reachableFromEntry, &visitedNodes, &dfs](const CallGraphNode *v)
97
+ {
97
98
  NodeID id = v->getId();
98
99
  if (!visitedNodes.test_and_set(id))
99
100
  return reachableFromEntry[id];
@@ -300,7 +301,7 @@ void CallGraph::verifyCallGraph()
300
301
  const CallICFGNode* cs = it->first;
301
302
  const FunObjVar* func = cs->getCaller();
302
303
  if (getCallGraphNode(func)->
303
- isReachableFromProgEntry(reachableFromEntry, visitedNodes) == false)
304
+ isReachableFromProgEntry(reachableFromEntry, visitedNodes) == false)
304
305
  writeWrnMsg(func->getName() + " has indirect call site but not reachable from main");
305
306
  }
306
307
  }
@@ -1234,7 +1234,7 @@ SVFType* LLVMModuleSet::addSVFTypeInfo(const Type* T)
1234
1234
  {
1235
1235
  paramTypes.push_back(getSVFType(t));
1236
1236
  }
1237
- svftype = new SVFFunctionType(getSVFType(ft->getReturnType()), paramTypes);
1237
+ svftype = new SVFFunctionType(getSVFType(ft->getReturnType()), paramTypes, ft->isVarArg());
1238
1238
  }
1239
1239
  else if (const StructType* st = SVFUtil::dyn_cast<StructType>(T))
1240
1240
  {