diff options
Diffstat (limited to 'clang/include')
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); |

