]> granicus.if.org Git - clang/commitdiff
DataflowSolver now acccepts an "_Equal" template parameter that allows the user
authorTed Kremenek <kremenek@apple.com>
Tue, 18 Sep 2007 23:40:51 +0000 (23:40 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 18 Sep 2007 23:40:51 +0000 (23:40 +0000)
to specify how two dataflow values should be compared for equality.  The default
is to use std::equal_to.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42115 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/DataflowSolver.h
include/clang/Analysis/UninitializedValues.h

index b89b45b67739614a3ac0043a28df6f03f67a9402..d5e5bbbe805186cce2d8b08b6cb57eba6ea2938e 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "clang/AST/CFG.h"
 #include "llvm/ADT/SmallPtrSet.h"
+#include "functional" // STL
 
 namespace clang {
 
@@ -47,7 +48,8 @@ public:
 /// DataflowSolverTy - Generic dataflow solver.
 template <typename _DFValuesTy,      // Usually a subclass of DataflowValues
           typename _TransferFuncsTy,
-          typename _MergeOperatorTy >
+          typename _MergeOperatorTy,
+          typename _Equal = std::equal_to<typename _DFValuesTy::ValTy> >
 class DataflowSolver {
 
   //===--------------------------------------------------------------------===//
@@ -228,7 +230,7 @@ private:
       M[E].copyValues(V);
       WorkList.enqueue(TargetBlock);
     }
-    else if (!(V==I->second)) {
+    else if (!_Equal()(V,I->second)) {
       I->second.copyValues(V);
       WorkList.enqueue(TargetBlock);
     }
index d116da595c5e5532f5d8d06cf10a94ed3b679a03..21e1ebd4476bcec60e9b4bc6bf856c1bfc35065b 100644 (file)
@@ -71,7 +71,7 @@ public:
       ExprBV.reset();
     }
     
-    bool operator==(ValTy& RHS) const { 
+    bool operator==(const ValTy& RHS) const { 
       return DeclBV == RHS.DeclBV && ExprBV == RHS.ExprBV; 
     }