summaryrefslogtreecommitdiffstats
path: root/clang/include
diff options
context:
space:
mode:
Diffstat (limited to 'clang/include')
-rw-r--r--clang/include/clang/Analysis/PathSensitive/BasicValueFactory.h1
-rw-r--r--clang/include/clang/Analysis/PathSensitive/ConstraintManager.h4
-rw-r--r--clang/include/clang/Analysis/PathSensitive/GRExprEngine.h6
-rw-r--r--clang/include/clang/Analysis/PathSensitive/GRState.h6
-rw-r--r--clang/include/clang/Analysis/PathSensitive/SVals.h3
5 files changed, 15 insertions, 5 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/BasicValueFactory.h b/clang/include/clang/Analysis/PathSensitive/BasicValueFactory.h
index 639ff5d92cc..70fbe1de83f 100644
--- a/clang/include/clang/Analysis/PathSensitive/BasicValueFactory.h
+++ b/clang/include/clang/Analysis/PathSensitive/BasicValueFactory.h
@@ -72,6 +72,7 @@ public:
ASTContext& getContext() const { return Ctx; }
const llvm::APSInt& getValue(const llvm::APSInt& X);
+ const llvm::APSInt& getValue(const llvm::APInt& X, bool isUnsigned);
const llvm::APSInt& getValue(uint64_t X, unsigned BitWidth, bool isUnsigned);
const llvm::APSInt& getValue(uint64_t X, QualType T);
diff --git a/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h b/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
index 71ae247f577..3f2e60d3ef9 100644
--- a/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
+++ b/clang/include/clang/Analysis/PathSensitive/ConstraintManager.h
@@ -34,6 +34,10 @@ public:
virtual const GRState* Assume(const GRState* St, SVal Cond,
bool Assumption, bool& isFeasible) = 0;
+ virtual const GRState* AssumeInBound(const GRState* St, SVal Idx,
+ SVal UpperBound, bool Assumption,
+ bool& isFeasible) = 0;
+
virtual const GRState* AddNE(const GRState* St, SymbolID sym,
const llvm::APSInt& V) = 0;
virtual const llvm::APSInt* getSymVal(const GRState* St, SymbolID sym) = 0;
diff --git a/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h b/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
index 5ba61d86457..1b7d9bf6a39 100644
--- a/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
+++ b/clang/include/clang/Analysis/PathSensitive/GRExprEngine.h
@@ -468,11 +468,7 @@ protected:
const GRState* AssumeInBound(const GRState* St, SVal Idx, SVal UpperBound,
bool Assumption, bool& isFeasible) {
- // FIXME: In this function, we will check if Idx can be in/out
- // [0, UpperBound) according to the assumption. We can extend the
- // interface to include a LowerBound parameter.
- isFeasible = true;
- return St;
+ return StateMgr.AssumeInBound(St, Idx, UpperBound, Assumption, isFeasible);
}
NodeTy* MakeNode(NodeSet& Dst, Stmt* S, NodeTy* Pred, const GRState* St,
diff --git a/clang/include/clang/Analysis/PathSensitive/GRState.h b/clang/include/clang/Analysis/PathSensitive/GRState.h
index 0a40998e399..68f7921db32 100644
--- a/clang/include/clang/Analysis/PathSensitive/GRState.h
+++ b/clang/include/clang/Analysis/PathSensitive/GRState.h
@@ -523,6 +523,12 @@ public:
return ConstraintMgr->Assume(St, Cond, Assumption, isFeasible);
}
+ const GRState* AssumeInBound(const GRState* St, SVal Idx, SVal UpperBound,
+ bool Assumption, bool& isFeasible) {
+ return ConstraintMgr->AssumeInBound(St, Idx, UpperBound, Assumption,
+ isFeasible);
+ }
+
const GRState* AddNE(const GRState* St, SymbolID sym, const llvm::APSInt& V) {
return ConstraintMgr->AddNE(St, sym, V);
}
diff --git a/clang/include/clang/Analysis/PathSensitive/SVals.h b/clang/include/clang/Analysis/PathSensitive/SVals.h
index 417a89adc8a..16322f111f2 100644
--- a/clang/include/clang/Analysis/PathSensitive/SVals.h
+++ b/clang/include/clang/Analysis/PathSensitive/SVals.h
@@ -173,6 +173,9 @@ public:
static NonLoc MakeVal(BasicValueFactory& BasicVals, uint64_t X, QualType T);
static NonLoc MakeVal(BasicValueFactory& BasicVals, IntegerLiteral* I);
+
+ static NonLoc MakeVal(BasicValueFactory& BasicVals, const llvm::APInt& I,
+ bool isUnsigned);
static NonLoc MakeIntTruthVal(BasicValueFactory& BasicVals, bool b);
OpenPOWER on IntegriCloud