From 66b527193aa6f3aa94c03f6769c42d7642e1e147 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 11 Mar 2009 02:22:59 +0000 Subject: [PATCH] Added method "canReasonAbout" to ConstraintManager. This method returns true if a ConstraintManager can usefully reason about the given SVal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66624 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Analysis/PathSensitive/ConstraintManager.h | 7 +++++++ lib/Analysis/SimpleConstraintManager.cpp | 4 ++++ lib/Analysis/SimpleConstraintManager.h | 3 +++ 3 files changed, 14 insertions(+) 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); -- 2.40.0