aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Checker
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-09-30 01:06:26 +0000
committerTed Kremenek <kremenek@apple.com>2010-09-30 01:06:26 +0000
commit3fc1f8239ea0671fcf707a80473de05b4392a58e (patch)
tree1de7574c5c6dcd37fd76d3a4f90d062521375e2a /include/clang/Checker
parent535a3e20104461c136654d59fb833ae80644ae79 (diff)
Change CheckerVisitor so that [Pre,Post]VisitCallExpr only handles CallExprs for simple C functions, not
all CallExprs (including CXXMemberCallExpr, etc.). Now the generic handler for all CallExprs is [Pre,Post]VisitGenericCallExpr. Also add [Pre,Post]Visit hooks for CXXMemberCallExpr. Change GRExprEngine::VisitCXXMemberCallExpr() to do pre/post checker visits of the call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115119 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Checker')
-rw-r--r--include/clang/Checker/PathSensitive/CheckerVisitor.def10
-rw-r--r--include/clang/Checker/PathSensitive/CheckerVisitor.h7
2 files changed, 13 insertions, 4 deletions
diff --git a/include/clang/Checker/PathSensitive/CheckerVisitor.def b/include/clang/Checker/PathSensitive/CheckerVisitor.def
index e68c148556..4f9c48c2fe 100644
--- a/include/clang/Checker/PathSensitive/CheckerVisitor.def
+++ b/include/clang/Checker/PathSensitive/CheckerVisitor.def
@@ -21,8 +21,9 @@
PREVISIT(ArraySubscriptExpr, Stmt)
PREVISIT(BinaryOperator, Stmt)
-PREVISIT(CallExpr, Stmt)
-PREVISIT(CXXOperatorCallExpr, CallExpr)
+PREVISIT(CallExpr, GenericCall)
+PREVISIT(CXXOperatorCallExpr, GenericCall)
+PREVISIT(CXXMemberCallExpr, GenericCall)
PREVISIT(DeclStmt, Stmt)
PREVISIT(ObjCAtSynchronizedStmt, Stmt)
PREVISIT(ObjCMessageExpr, Stmt)
@@ -30,8 +31,9 @@ PREVISIT(ReturnStmt, Stmt)
POSTVISIT(BlockExpr, Stmt)
POSTVISIT(BinaryOperator, Stmt)
-POSTVISIT(CallExpr, Stmt)
-POSTVISIT(CXXOperatorCallExpr, CallExpr)
+POSTVISIT(CallExpr, GenericCall)
+POSTVISIT(CXXOperatorCallExpr, GenericCall)
+POSTVISIT(CXXMemberCallExpr, GenericCall)
POSTVISIT(ObjCMessageExpr, Stmt)
#undef PREVISIT
diff --git a/include/clang/Checker/PathSensitive/CheckerVisitor.h b/include/clang/Checker/PathSensitive/CheckerVisitor.h
index e2ba89bca1..6d45bd3546 100644
--- a/include/clang/Checker/PathSensitive/CheckerVisitor.h
+++ b/include/clang/Checker/PathSensitive/CheckerVisitor.h
@@ -79,6 +79,13 @@ break;
}
}
+ void PreVisitGenericCall(CheckerContext &C, const CallExpr *CE) {
+ static_cast<ImplClass*>(this)->PreVisitStmt(C, CE);
+ }
+ void PostVisitGenericCall(CheckerContext &C, const CallExpr *CE) {
+ static_cast<ImplClass*>(this)->PostVisitStmt(C, CE);
+ }
+
void PreVisitStmt(CheckerContext &C, const Stmt *S) {
*C.respondsToCallback = false;
}