Patch by Ben Laurie:

ConstraintManager:
- constify getSymVal()

BasicConstraintManager:
- Pull out logic that would be common to ConstraintManagers of a similar nature
  and put them in a parent class called 'SimpleConstraintManager'.

RangeConstraintManager:
- Added a new prototype ConstraintManager to track ranges of variables! This
  ConstraintManager keeps tracks of ranges of concrete integers that a symbolic
  integer may have.

AnalysisConsumer:
- Add driver option to use RangeConstraintManager with GRExprEngine-based
  analyses.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64558 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Driver/AnalysisConsumer.cpp b/Driver/AnalysisConsumer.cpp
index a5c253c..007a51d 100644
--- a/Driver/AnalysisConsumer.cpp
+++ b/Driver/AnalysisConsumer.cpp
@@ -48,6 +48,11 @@
           llvm::cl::init(true),
           llvm::cl::desc("Remove dead symbols, bindings, and constraints before"
                          " processing a statement."));
+static llvm::cl::opt<bool>
+UseRanges("analyzer-range-constraints",
+          llvm::cl::init(true),
+          llvm::cl::desc("Use the range constraint manager instead of the basic"
+                         " constraint manager"));
   
 //===----------------------------------------------------------------------===//
 // Basic type definitions.
@@ -288,6 +293,8 @@
 
       if (ManagerRegistry::ConstraintMgrCreator != 0)
         CreateConstraintMgr = ManagerRegistry::ConstraintMgrCreator;
+      else if (UseRanges)
+        CreateConstraintMgr = CreateRangeConstraintManager;
       else
         CreateConstraintMgr = CreateBasicConstraintManager;