summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Analysis/PathSensitive/ConstraintManager.h2
-rw-r--r--clang/include/clang/Analysis/PathSensitive/GRState.h12
-rw-r--r--clang/lib/Analysis/BasicConstraintManager.cpp2
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp7
4 files changed, 10 insertions, 13 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h b/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
index 4cded5ce691..6b69a1020cd 100644
--- a/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
+++ b/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
@@ -38,8 +38,6 @@ public:
SVal UpperBound, bool Assumption,
bool& isFeasible) = 0;
- virtual const GRState* AddNE(const GRState* St, SymbolRef sym,
- const llvm::APSInt& V) = 0;
virtual const llvm::APSInt* getSymVal(const GRState* St, SymbolRef sym) = 0;
virtual bool isEqual(const GRState* St, SymbolRef sym,
diff --git a/clang/include/clang/Analysis/PathSensitive/GRState.h b/clang/include/clang/Analysis/PathSensitive/GRState.h
index 45ad702346c..b227f91a78f 100644
--- a/clang/include/clang/Analysis/PathSensitive/GRState.h
+++ b/clang/include/clang/Analysis/PathSensitive/GRState.h
@@ -603,10 +603,6 @@ public:
isFeasible);
}
- const GRState* AddNE(const GRState* St, SymbolRef sym, const llvm::APSInt& V) {
- return ConstraintMgr->AddNE(St, sym, V);
- }
-
const llvm::APSInt* getSymVal(const GRState* St, SymbolRef sym) {
return ConstraintMgr->getSymVal(St, sym);
}
@@ -671,10 +667,6 @@ public:
return GRStateRef(Mgr->Unbind(St, LV), *Mgr);
}
- GRStateRef AddNE(SymbolRef sym, const llvm::APSInt& V) {
- return GRStateRef(Mgr->AddNE(St, sym, V), *Mgr);
- }
-
// Trait based GDM dispatch.
template<typename T>
typename GRStateTrait<T>::data_type get() const {
@@ -735,6 +727,10 @@ public:
SVal GetLValue(const VarDecl* VD) {
return Mgr->GetLValue(St, VD);
}
+
+ GRStateRef Assume(SVal Cond, bool Assumption, bool& isFeasible) {
+ return GRStateRef(Mgr->Assume(St, Cond, Assumption, isFeasible), *Mgr);
+ }
// Pretty-printing.
void print(std::ostream& Out, const char* nl = "\n",
diff --git a/clang/lib/Analysis/BasicConstraintManager.cpp b/clang/lib/Analysis/BasicConstraintManager.cpp
index 7496c5f5aac..f14ada7aed6 100644
--- a/clang/lib/Analysis/BasicConstraintManager.cpp
+++ b/clang/lib/Analysis/BasicConstraintManager.cpp
@@ -72,7 +72,7 @@ public:
const SymIntConstraint& C, bool& isFeasible);
const GRState* AssumeSymNE(const GRState* St, SymbolRef sym,
- const llvm::APSInt& V, bool& isFeasible);
+ const llvm::APSInt& V, bool& isFeasible);
const GRState* AssumeSymEQ(const GRState* St, SymbolRef sym,
const llvm::APSInt& V, bool& isFeasible);
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index 2d5cb5f5b89..6f1b1036b30 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -1678,8 +1678,11 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<GRState>& Dst,
#endif
// FIXME: Add a flag to the checker where allocations are allowed to fail.
- if (RE.getKind() == RetEffect::OwnedAllocatedSymbol)
- state = state.AddNE(Sym, Eng.getBasicVals().getZeroWithPtrWidth());
+ if (RE.getKind() == RetEffect::OwnedAllocatedSymbol) {
+ bool isFeasible;
+ state = state.Assume(loc::SymbolVal(Sym), true, isFeasible);
+ assert(isFeasible && "Cannot assume fresh symbol is non-null.");
+ }
break;
}
OpenPOWER on IntegriCloud