diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/analysis.cpp | 4 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 20 | ||||
-rw-r--r-- | src/analysis/expression.h | 3 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index 3cd7215..e4e789f 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -35,6 +35,7 @@ #include "nodes/expr/addr_expr.h" #include "nodes/expr/bind_expr.h" #include "nodes/expr/compound_expr.h" +#include "nodes/expr/call_expr.h" #include "nodes/expr/cond_expr.h" #include "nodes/expr/decl_expr.h" #include "nodes/expr/eq_expr.h" @@ -331,6 +332,9 @@ void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo) case EQ_EXPR: analyseEqExpr(static_cast<EqExprNode*>(node), wi2, wo); break; + case CALL_EXPR: + analyseCallExpr(static_cast<CallExprNode*>(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 a31f78f..28e7bb8 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -378,4 +378,24 @@ void analyseNopExpr(NopExprNode *node, const WalkItem &wi, WalkItem &wo) wo.stopWalking = true; } +void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo) +{ + WalkItem wo2 = wo; + Log::dumpWI(node, "wo in ", wo); + walkTree(node->chain, wi, wo2); + Log::dumpWI(node, "wo chain ", wo2); + wo2 = wo; + walkTree(node->function, wi, wo2); + Log::dumpWI(node, "wo function ", wo2); + 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.stopWalking = true; +} + } diff --git a/src/analysis/expression.h b/src/analysis/expression.h index 99ba788..b94e625 100644 --- a/src/analysis/expression.h +++ b/src/analysis/expression.h @@ -24,6 +24,7 @@ struct AddrExprNode; struct BindExprNode; +struct CallExprNode; struct CompoundExprNode; struct CondExprNode; struct DeclExprNode; @@ -47,6 +48,8 @@ namespace Analysis void analyseAddrExpr(AddrExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo); + void analyseReturnExpr(ReturnExprNode *node, const WalkItem &wi, WalkItem &wo); void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo); |