svf-tools 1.0.684 → 1.0.686
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.
|
|
3
|
+
"version": "1.0.686",
|
|
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": {
|
|
@@ -179,6 +179,7 @@ public:
|
|
|
179
179
|
return lhs;
|
|
180
180
|
else
|
|
181
181
|
assert(false && "undefined operation +oo + -oo");
|
|
182
|
+
abort();
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
friend BoundedZ3Expr operator-(const BoundedZ3Expr &lhs)
|
|
@@ -198,6 +199,7 @@ public:
|
|
|
198
199
|
return lhs;
|
|
199
200
|
else
|
|
200
201
|
assert(false && "undefined operation +oo - +oo");
|
|
202
|
+
abort();
|
|
201
203
|
}
|
|
202
204
|
|
|
203
205
|
friend BoundedZ3Expr operator*(const BoundedZ3Expr &lhs, const BoundedZ3Expr &rhs)
|
|
@@ -225,7 +227,7 @@ public:
|
|
|
225
227
|
else
|
|
226
228
|
// TODO: +oo/-oo L'Hôpital's rule?
|
|
227
229
|
return eq(lhs, rhs) ? plus_infinity() : minus_infinity();
|
|
228
|
-
|
|
230
|
+
abort();
|
|
229
231
|
}
|
|
230
232
|
|
|
231
233
|
friend BoundedZ3Expr operator%(const BoundedZ3Expr &lhs, const BoundedZ3Expr &rhs)
|
|
@@ -241,6 +243,7 @@ public:
|
|
|
241
243
|
else
|
|
242
244
|
// TODO: +oo/-oo L'Hôpital's rule?
|
|
243
245
|
return eq(lhs, rhs) ? plus_infinity() : minus_infinity();
|
|
246
|
+
abort();
|
|
244
247
|
}
|
|
245
248
|
|
|
246
249
|
friend BoundedZ3Expr operator^(const BoundedZ3Expr &lhs, const BoundedZ3Expr &rhs)
|
|
@@ -546,7 +546,7 @@ inline IntervalValue operator%(const IntervalValue &lhs,
|
|
|
546
546
|
else
|
|
547
547
|
{
|
|
548
548
|
NumericLiteral n_ub = max(abs(lhs.lb()), abs(lhs.ub()));
|
|
549
|
-
NumericLiteral d_ub = max(abs(rhs.lb()), rhs.ub() - 1
|
|
549
|
+
NumericLiteral d_ub = max(abs(rhs.lb()), rhs.ub()) - 1;
|
|
550
550
|
NumericLiteral ub = min(n_ub, d_ub);
|
|
551
551
|
|
|
552
552
|
if (lhs.lb().getNumeral() < 0)
|
|
@@ -592,7 +592,7 @@ inline IntervalValue operator>(const IntervalValue &lhs, const IntervalValue &rh
|
|
|
592
592
|
return IntervalValue(1, 1);
|
|
593
593
|
// lhs[1,2] rhs[3,4]
|
|
594
594
|
}
|
|
595
|
-
else if (lhs.ub().geq(rhs.lb()))
|
|
595
|
+
else if (!lhs.ub().geq(rhs.lb()))
|
|
596
596
|
{
|
|
597
597
|
return IntervalValue(0, 0);
|
|
598
598
|
}
|
|
@@ -408,7 +408,7 @@ private:
|
|
|
408
408
|
cJSON* toJson(const LocationSet& ls);
|
|
409
409
|
cJSON* toJson(const SVFLoop* loop);
|
|
410
410
|
cJSON* toJson(const MemObj* memObj);
|
|
411
|
-
cJSON* toJson(const ObjTypeInfo* objTypeInfo); //
|
|
411
|
+
cJSON* toJson(const ObjTypeInfo* objTypeInfo); // Only owned by MemObj
|
|
412
412
|
cJSON* toJson(const SVFLoopAndDomInfo* ldInfo); // Only owned by SVFFunction
|
|
413
413
|
cJSON* toJson(const StInfo* type); // Ensure Only owned by SVFType
|
|
414
414
|
|
|
@@ -157,7 +157,7 @@ void LLVMModuleSet::build()
|
|
|
157
157
|
void LLVMModuleSet::createSVFDataStructure()
|
|
158
158
|
{
|
|
159
159
|
|
|
160
|
-
for (Module& mod : modules)
|
|
160
|
+
for (const Module& mod : modules)
|
|
161
161
|
{
|
|
162
162
|
/// Function
|
|
163
163
|
for (const Function& func : mod.functions())
|
|
@@ -325,49 +325,35 @@ void LLVMModuleSet::initDomTree(SVFFunction* svffun, const Function* fun)
|
|
|
325
325
|
LLVMUtil::getFunReachableBBs(fun, reachableBBs);
|
|
326
326
|
ld->setReachableBBs(reachableBBs);
|
|
327
327
|
|
|
328
|
-
for (
|
|
328
|
+
for (const BasicBlock &bb : fun->getBasicBlockList())
|
|
329
329
|
{
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
if(DomTreeNode *dtNode = dt.getNode(const_cast<BasicBlock*>(bb)))
|
|
330
|
+
SVFBasicBlock* svfBB = getSVFBasicBlock(&bb);
|
|
331
|
+
if (DomTreeNode* dtNode = dt.getNode(&bb))
|
|
333
332
|
{
|
|
334
|
-
|
|
335
|
-
|
|
333
|
+
SVFLoopAndDomInfo::BBSet& bbSet = ld->getDomTreeMap()[svfBB];
|
|
334
|
+
for (const auto domBB : *dtNode)
|
|
336
335
|
{
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
const SVFBasicBlock* dombb = getSVFBasicBlock((*DI)->getBlock());
|
|
340
|
-
ld->getDomTreeMap()[svf_bb].insert(dombb);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else
|
|
344
|
-
{
|
|
345
|
-
ld->getDomTreeMap()[svf_bb] = Set<const SVFBasicBlock* >();
|
|
336
|
+
const auto* domSVFBB = getSVFBasicBlock(domBB->getBlock());
|
|
337
|
+
bbSet.insert(domSVFBB);
|
|
346
338
|
}
|
|
347
339
|
}
|
|
348
340
|
|
|
349
|
-
if(DomTreeNode
|
|
341
|
+
if (DomTreeNode* pdtNode = pdt.getNode(&bb))
|
|
350
342
|
{
|
|
351
|
-
|
|
352
|
-
|
|
343
|
+
SVFLoopAndDomInfo::BBSet& bbSet = ld->getPostDomTreeMap()[svfBB];
|
|
344
|
+
for (const auto domBB : *pdtNode)
|
|
353
345
|
{
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
const SVFBasicBlock* dombb = getSVFBasicBlock((*DI)->getBlock());
|
|
357
|
-
ld->getPostDomTreeMap()[svf_bb].insert(dombb);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
else
|
|
361
|
-
{
|
|
362
|
-
ld->getPostDomTreeMap()[svf_bb] = Set<const SVFBasicBlock* >();
|
|
346
|
+
const auto* domSVFBB = getSVFBasicBlock(domBB->getBlock());
|
|
347
|
+
bbSet.insert(domSVFBB);
|
|
363
348
|
}
|
|
364
349
|
}
|
|
365
|
-
|
|
350
|
+
|
|
351
|
+
if (const Loop* loop = loopInfo.getLoopFor(&bb))
|
|
366
352
|
{
|
|
367
|
-
for (BasicBlock* loopBlock:loop->getBlocks())
|
|
353
|
+
for (const BasicBlock* loopBlock : loop->getBlocks())
|
|
368
354
|
{
|
|
369
355
|
const SVFBasicBlock* loopbb = getSVFBasicBlock(loopBlock);
|
|
370
|
-
ld->addToBB2LoopMap(
|
|
356
|
+
ld->addToBB2LoopMap(svfBB, loopbb);
|
|
371
357
|
}
|
|
372
358
|
}
|
|
373
359
|
}
|
|
@@ -782,13 +768,6 @@ void LLVMModuleSet::buildGlobalDefToRepMap()
|
|
|
782
768
|
: (assert(!globals.empty() && "Empty global set"),
|
|
783
769
|
*globals.begin());
|
|
784
770
|
|
|
785
|
-
for (Set<GlobalVariable*>::const_iterator sit = globals.begin(),
|
|
786
|
-
seit = globals.end(); sit != seit; ++sit)
|
|
787
|
-
{
|
|
788
|
-
GlobalVariable *cur = *sit;
|
|
789
|
-
GlobalDefToRepMap[cur] = rep;
|
|
790
|
-
}
|
|
791
|
-
|
|
792
771
|
for (const GlobalVariable* cur : globals)
|
|
793
772
|
{
|
|
794
773
|
GlobalDefToRepMap[cur] = rep;
|