summaryrefslogtreecommitdiffstats
path: root/clang/lib/Checker/UndefinedAssignmentChecker.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-09-02 00:56:20 +0000
committerTed Kremenek <kremenek@apple.com>2010-09-02 00:56:20 +0000
commit07343c02bee77d0caa26578f6b5cf4b3dc8a2a85 (patch)
tree6aecea96e844923074a508beeb4332747bca7f6e /clang/lib/Checker/UndefinedAssignmentChecker.cpp
parent74487fcbe7abe3b582e4cd1b1a87af3f57204f0d (diff)
downloadbcm5719-llvm-07343c02bee77d0caa26578f6b5cf4b3dc8a2a85.tar.gz
bcm5719-llvm-07343c02bee77d0caa26578f6b5cf4b3dc8a2a85.zip
For GRExprEngine::EvalBind() (and called visitors), unifiy StoreE and AssignE. Now StoreE (const Stmt*) represents the expression where the store took place, which is the assignment expression if it takes place in an assignment. This removes some conceptual dissidence as well as removes an extra parameter from the Checker::PreVisitBind() visitor. It also improves ranges and source location information in analyzer diagnostics.
llvm-svn: 112789
Diffstat (limited to 'clang/lib/Checker/UndefinedAssignmentChecker.cpp')
-rw-r--r--clang/lib/Checker/UndefinedAssignmentChecker.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/clang/lib/Checker/UndefinedAssignmentChecker.cpp b/clang/lib/Checker/UndefinedAssignmentChecker.cpp
index 6cef60eaee2..ccc97489e63 100644
--- a/clang/lib/Checker/UndefinedAssignmentChecker.cpp
+++ b/clang/lib/Checker/UndefinedAssignmentChecker.cpp
@@ -25,9 +25,8 @@ class UndefinedAssignmentChecker
public:
UndefinedAssignmentChecker() : BT(0) {}
static void *getTag();
- virtual void PreVisitBind(CheckerContext &C, const Stmt *AssignE,
- const Stmt *StoreE, SVal location,
- SVal val);
+ virtual void PreVisitBind(CheckerContext &C, const Stmt *StoreE,
+ SVal location, SVal val);
};
}
@@ -41,7 +40,6 @@ void *UndefinedAssignmentChecker::getTag() {
}
void UndefinedAssignmentChecker::PreVisitBind(CheckerContext &C,
- const Stmt *AssignE,
const Stmt *StoreE,
SVal location,
SVal val) {
@@ -61,8 +59,8 @@ void UndefinedAssignmentChecker::PreVisitBind(CheckerContext &C,
// Generate a report for this bug.
const Expr *ex = 0;
- while (AssignE) {
- if (const BinaryOperator *B = dyn_cast<BinaryOperator>(AssignE)) {
+ while (StoreE) {
+ if (const BinaryOperator *B = dyn_cast<BinaryOperator>(StoreE)) {
if (B->isCompoundAssignmentOp()) {
const GRState *state = C.getState();
if (state->getSVal(B->getLHS()).isUndef()) {
@@ -77,7 +75,7 @@ void UndefinedAssignmentChecker::PreVisitBind(CheckerContext &C,
break;
}
- if (const DeclStmt *DS = dyn_cast<DeclStmt>(AssignE)) {
+ if (const DeclStmt *DS = dyn_cast<DeclStmt>(StoreE)) {
const VarDecl* VD = dyn_cast<VarDecl>(DS->getSingleDecl());
ex = VD->getInit();
}
OpenPOWER on IntegriCloud