diff options
-rw-r--r-- | include/clang/Analysis/PathSensitive/ConstraintManager.h | 7 | ||||
-rw-r--r-- | lib/Analysis/SimpleConstraintManager.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/SimpleConstraintManager.h | 3 |
3 files changed, 14 insertions, 0 deletions
diff --git a/include/clang/Analysis/PathSensitive/ConstraintManager.h b/include/clang/Analysis/PathSensitive/ConstraintManager.h index f526d7819e..32e5bb0cb3 100644 --- a/include/clang/Analysis/PathSensitive/ConstraintManager.h +++ b/include/clang/Analysis/PathSensitive/ConstraintManager.h @@ -51,6 +51,13 @@ public: const char* nl, const char *sep) = 0; virtual void EndPath(const GRState* St) {} + + /// canReasonAbout - Not all ConstraintManagers can accurately reason about + /// all SVal values. This method returns true if the ConstraintManager can + /// reasonably handle a given SVal value. This is typically queried by + /// GRExprEngine to determine if the value should be replaced with a + /// conjured symbolic value in order to recover some precision. + virtual bool canReasonAbout(SVal X) const = 0; }; ConstraintManager* CreateBasicConstraintManager(GRStateManager& statemgr); diff --git a/lib/Analysis/SimpleConstraintManager.cpp b/lib/Analysis/SimpleConstraintManager.cpp index c72f39c2fc..82cc0bb7bc 100644 --- a/lib/Analysis/SimpleConstraintManager.cpp +++ b/lib/Analysis/SimpleConstraintManager.cpp @@ -20,6 +20,10 @@ namespace clang { SimpleConstraintManager::~SimpleConstraintManager() {} +bool SimpleConstraintManager::canReasonAbout(SVal X) const { + return true; +} + const GRState* SimpleConstraintManager::Assume(const GRState* St, SVal Cond, bool Assumption, bool& isFeasible) { diff --git a/lib/Analysis/SimpleConstraintManager.h b/lib/Analysis/SimpleConstraintManager.h index 02292a1cbc..08ab66063a 100644 --- a/lib/Analysis/SimpleConstraintManager.h +++ b/lib/Analysis/SimpleConstraintManager.h @@ -26,6 +26,9 @@ public: SimpleConstraintManager(GRStateManager& statemgr) : StateMgr(statemgr) {} virtual ~SimpleConstraintManager(); + + bool canReasonAbout(SVal X) const; + virtual const GRState* Assume(const GRState* St, SVal Cond, bool Assumption, bool& isFeasible); |