diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-09-30 01:06:26 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-09-30 01:06:26 +0000 |
commit | 3fc1f8239ea0671fcf707a80473de05b4392a58e (patch) | |
tree | 1de7574c5c6dcd37fd76d3a4f90d062521375e2a /include/clang/Checker | |
parent | 535a3e20104461c136654d59fb833ae80644ae79 (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.def | 10 | ||||
-rw-r--r-- | include/clang/Checker/PathSensitive/CheckerVisitor.h | 7 |
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; } |