summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/GRSimpleVals.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Analysis/GRSimpleVals.h')
-rw-r--r--clang/lib/Analysis/GRSimpleVals.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/clang/lib/Analysis/GRSimpleVals.h b/clang/lib/Analysis/GRSimpleVals.h
new file mode 100644
index 00000000000..2b3d0fd00a2
--- /dev/null
+++ b/clang/lib/Analysis/GRSimpleVals.h
@@ -0,0 +1,71 @@
+// GRSimpleVals.h - Transfer functions for tracking simple values -*- C++ -*--//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines GRSimpleVals, a sub-class of GRTransferFuncs that
+// provides transfer functions for performing simple value tracking with
+// limited support for symbolics.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_ANALYSIS_GRSIMPLEVALS
+#define LLVM_CLANG_ANALYSIS_GRSIMPLEVALS
+
+#include "clang/Analysis/PathSensitive/GRTransferFuncs.h"
+#include "clang/Analysis/PathSensitive/GRExprEngine.h"
+
+namespace clang {
+
+class GRSimpleVals : public GRTransferFuncs {
+public:
+ GRSimpleVals() {}
+ virtual ~GRSimpleVals() {}
+
+ // Casts.
+
+ virtual RVal EvalCast(GRExprEngine& Engine, NonLVal V, QualType CastT);
+ virtual RVal EvalCast(GRExprEngine& Engine, LVal V, QualType CastT);
+
+ // Unary Operators.
+
+ virtual RVal EvalMinus(GRExprEngine& Engine, UnaryOperator* U, NonLVal X);
+
+ virtual RVal EvalComplement(GRExprEngine& Engine, NonLVal X);
+
+ // Binary Operators.
+
+ virtual RVal EvalBinOp(GRExprEngine& Engine, BinaryOperator::Opcode Op,
+ NonLVal L, NonLVal R);
+
+ virtual RVal EvalBinOp(GRExprEngine& Engine, BinaryOperator::Opcode Op,
+ LVal L, LVal R);
+
+ // Pointer arithmetic.
+
+ virtual RVal EvalBinOp(GRExprEngine& Engine, BinaryOperator::Opcode Op,
+ LVal L, NonLVal R);
+
+ // Calls.
+
+ virtual void EvalCall(ExplodedNodeSet<ValueState>& Dst,
+ GRExprEngine& Engine,
+ GRStmtNodeBuilder<ValueState>& Builder,
+ CallExpr* CE, LVal L,
+ ExplodedNode<ValueState>* Pred);
+
+protected:
+
+ // Equality operators for LVals.
+
+ RVal EvalEQ(GRExprEngine& Engine, LVal L, LVal R);
+ RVal EvalNE(GRExprEngine& Engine, LVal L, LVal R);
+};
+
+} // end clang namespace
+
+#endif
OpenPOWER on IntegriCloud