summaryrefslogtreecommitdiffstats
path: root/clang/Analysis/GRTransferFuncs.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-14 18:28:23 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-14 18:28:23 +0000
commit3ca942969e7e414a98a103304d6319d537febe87 (patch)
treef657858fb0deb6ca5f2d79fe592a4df26d4f1f46 /clang/Analysis/GRTransferFuncs.cpp
parent551d3e6303a6845f018941b370c112202b11e682 (diff)
downloadbcm5719-llvm-3ca942969e7e414a98a103304d6319d537febe87.tar.gz
bcm5719-llvm-3ca942969e7e414a98a103304d6319d537febe87.zip
Started partitioning of transfer function logic (and thus the policy behind
these operations) into GRTransferFuncs and its subclasses. Originally all of this logic was handled by the class RValue, but in reality different analyses will want more flexibility on how they evaluate different values. Transfer functions migrated so far: "Cast" llvm-svn: 47125
Diffstat (limited to 'clang/Analysis/GRTransferFuncs.cpp')
-rw-r--r--clang/Analysis/GRTransferFuncs.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/Analysis/GRTransferFuncs.cpp b/clang/Analysis/GRTransferFuncs.cpp
new file mode 100644
index 00000000000..3716ed96910
--- /dev/null
+++ b/clang/Analysis/GRTransferFuncs.cpp
@@ -0,0 +1,41 @@
+//== GRTransferFuncs.cpp - Path-Sens. Transfer Functions Interface -*- C++ -*--=
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This files defines GRTransferFuncs, which provides a base-class that
+// defines an interface for transfer functions used by GRExprEngine.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Analysis/PathSensitive/GRTransferFuncs.h"
+
+using namespace clang;
+
+//===----------------------------------------------------------------------===//
+// Transfer function for Casts.
+//===----------------------------------------------------------------------===//
+
+RValue GRTransferFuncs::EvalCast(ValueManager& ValMgr, RValue X,
+ Expr* CastExpr) {
+
+ switch (X.getBaseKind()) {
+ default:
+ assert(false && "Invalid RValue."); break;
+
+ case RValue::LValueKind:
+ return EvalCast(ValMgr, cast<LValue>(X), CastExpr);
+
+ case RValue::NonLValueKind:
+ return EvalCast(ValMgr, cast<NonLValue>(X), CastExpr);
+
+ case RValue::UninitializedKind:
+ case RValue::UnknownKind: break;
+ }
+
+ return X;
+}
OpenPOWER on IntegriCloud