diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/analysis.cpp | 4 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 16 | ||||
-rw-r--r-- | src/analysis/expression.h | 3 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index e4e789f..d17a46a 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -36,6 +36,7 @@ #include "nodes/expr/bind_expr.h" #include "nodes/expr/compound_expr.h" #include "nodes/expr/call_expr.h" +#include "nodes/expr/cleanuppoint_expr.h" #include "nodes/expr/cond_expr.h" #include "nodes/expr/decl_expr.h" #include "nodes/expr/eq_expr.h" @@ -335,6 +336,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo) case CALL_EXPR: analyseCallExpr(static_cast<CallExprNode*>(node), wi2, wo); break; + case CLEANUP_POINT_EXPR: + analyseCleanupPointExpr(static_cast<CleanupPointExprNode*>(node), wi2, wo); + break; case COND_EXPR: analyseCondExpr(static_cast<CondExprNode*>(node), wi2, wo); break; diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 13911de..7cab3a0 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -29,6 +29,7 @@ #include "nodes/expr/addr_expr.h" #include "nodes/expr/bind_expr.h" #include "nodes/expr/call_expr.h" +#include "nodes/expr/cleanuppoint_expr.h" #include "nodes/expr/compound_expr.h" #include "nodes/expr/cond_expr.h" #include "nodes/expr/decl_expr.h" @@ -436,4 +437,19 @@ void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo) wo.stopWalking = true; } +void analyseCleanupPointExpr(CleanupPointExprNode* node, const WalkItem &wi, WalkItem &wo) +{ + WalkItem wo2 = wo; + FOR_EACH (std::vector<Node*>::const_iterator, it, node->args) + { + wo2 = wo; + Node *node2 = skipNop(*it); + reportParmDeclNullPointer(node, node2, wi); + walkTree(node2, wi, wo2); + Log::dumpWI(node, "wo arg ", wo2); + } + wo = wo2; + wo.stopWalking = true; +} + } diff --git a/src/analysis/expression.h b/src/analysis/expression.h index b94e625..3085c40 100644 --- a/src/analysis/expression.h +++ b/src/analysis/expression.h @@ -25,6 +25,7 @@ struct AddrExprNode; struct BindExprNode; struct CallExprNode; +struct CleanupPointExprNode; struct CompoundExprNode; struct CondExprNode; struct DeclExprNode; @@ -50,6 +51,8 @@ namespace Analysis void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseCleanupPointExpr(CleanupPointExprNode* node, const WalkItem &wi, WalkItem &wo); + void analyseReturnExpr(ReturnExprNode *node, const WalkItem &wi, WalkItem &wo); void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo); |