[cfe-commits] r47638 - in /cfe/trunk: Analysis/GRSimpleVals.cpp Analysis/GRSimpleVals.h include/clang/Analysis/PathSensitive/GRExprEngine.h include/clang/Analysis/PathSensitive/GRTransferFuncs.h
Ted Kremenek
kremenek at apple.com
Tue Feb 26 15:04:29 PST 2008
Author: kremenek
Date: Tue Feb 26 17:04:29 2008
New Revision: 47638
URL: http://llvm.org/viewvc/llvm-project?rev=47638&view=rev
Log:
Added boilerplate for plug-in transfer function support for CallExprs.
GRSimpleVals performs the following action: invalidate all values passed-by-reference.
Modified:
cfe/trunk/Analysis/GRSimpleVals.cpp
cfe/trunk/Analysis/GRSimpleVals.h
cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h
cfe/trunk/include/clang/Analysis/PathSensitive/GRTransferFuncs.h
Modified: cfe/trunk/Analysis/GRSimpleVals.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRSimpleVals.cpp?rev=47638&r1=47637&r2=47638&view=diff
==============================================================================
--- cfe/trunk/Analysis/GRSimpleVals.cpp (original)
+++ cfe/trunk/Analysis/GRSimpleVals.cpp Tue Feb 26 17:04:29 2008
@@ -14,6 +14,7 @@
//===----------------------------------------------------------------------===//
#include "GRSimpleVals.h"
+#include "ValueState.h"
#include "clang/Basic/Diagnostic.h"
using namespace clang;
@@ -329,3 +330,27 @@
return NonLVal::MakeIntTruthVal(ValMgr, true);
}
+
+//===----------------------------------------------------------------------===//
+// Transfer function for Function Calls.
+//===----------------------------------------------------------------------===//
+
+ValueStateImpl*
+GRSimpleVals::EvalCall(ValueStateManager& StateMgr, ValueManager& ValMgr,
+ CallExpr* CE, LVal L, ValueStateImpl* StImpl) {
+
+ ValueState St(StImpl);
+
+ // Invalidate all arguments passed in by reference (LVals).
+
+ for (CallExpr::arg_iterator I = CE->arg_begin(), E = CE->arg_end();
+ I != E; ++I) {
+
+ RVal V = StateMgr.GetRVal(St, *I);
+
+ if (isa<LVal>(V))
+ St = StateMgr.SetRVal(St, cast<LVal>(V), UnknownVal());
+ }
+
+ return St.getImpl();
+}
Modified: cfe/trunk/Analysis/GRSimpleVals.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRSimpleVals.h?rev=47638&r1=47637&r2=47638&view=diff
==============================================================================
--- cfe/trunk/Analysis/GRSimpleVals.h (original)
+++ cfe/trunk/Analysis/GRSimpleVals.h Tue Feb 26 17:04:29 2008
@@ -50,6 +50,13 @@
virtual RVal EvalBinOp(ValueManager& ValMgr, BinaryOperator::Opcode Op,
LVal L, NonLVal R);
+ // Calls.
+
+ virtual ValueStateImpl* EvalCall(ValueStateManager& StateMgr,
+ ValueManager& ValMgr,
+ CallExpr* CE, LVal L,
+ ValueStateImpl* StImpl);
+
protected:
// Equality operators for LVals.
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h?rev=47638&r1=47637&r2=47638&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h Tue Feb 26 17:04:29 2008
@@ -410,7 +410,7 @@
}
StateTy EvalCall(CallExpr* CE, LVal L, StateTy St) {
- return St;
+ return StateTy(TF->EvalCall(StateMgr, ValMgr, CE, L, St.getImpl()));
}
StateTy MarkBranch(StateTy St, Stmt* Terminator, bool branchTaken);
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GRTransferFuncs.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GRTransferFuncs.h?rev=47638&r1=47637&r2=47638&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GRTransferFuncs.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GRTransferFuncs.h Tue Feb 26 17:04:29 2008
@@ -19,6 +19,9 @@
namespace clang {
+ class ValueStateImpl;
+ class ValueStateManager;
+
class GRTransferFuncs {
public:
GRTransferFuncs() {}
@@ -47,6 +50,13 @@
virtual RVal EvalBinOp(ValueManager& ValMgr, BinaryOperator::Opcode Op,
LVal L, NonLVal R) = 0;
+
+ // Calls.
+
+ virtual ValueStateImpl* EvalCall(ValueStateManager& StateMgr,
+ ValueManager& ValMgr,
+ CallExpr* CE, LVal L,
+ ValueStateImpl* StImpl) = 0;
};
} // end clang namespace
More information about the cfe-commits
mailing list