diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-17 19:29:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-17 19:29:34 +0300 |
commit | 69caff6e1cefaa415efce5d07aa5b16971a64365 (patch) | |
tree | 8956af0c052d830704325e280351d096f8d04985 | |
parent | 14c42add529be98ba8c398db3a4cc1c490fe7d59 (diff) | |
download | paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.gz paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.bz2 paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.xz paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.zip |
Skip NOP_EXPR in most analysis code.
-rw-r--r-- | src/analysis/analysis.cpp | 1 | ||||
-rw-r--r-- | src/analysis/declaration.cpp | 2 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 2 | ||||
-rw-r--r-- | src/analysis/ref.cpp | 2 | ||||
-rw-r--r-- | src/analysis/statement.cpp | 15 |
5 files changed, 12 insertions, 10 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp index a4d7aad..f690d25 100644 --- a/src/analysis/analysis.cpp +++ b/src/analysis/analysis.cpp @@ -106,6 +106,7 @@ void reportParmDeclNullPointer(Node *mainNode, Node *node, const WalkItem &wi) { + node = skipNop(node); if (node && node->nodeType == PARM_DECL) { if (wi.checkNullVars.find(node->label) != wi.checkNullVars.end()) diff --git a/src/analysis/declaration.cpp b/src/analysis/declaration.cpp index 322b4dc..a3ad6b5 100644 --- a/src/analysis/declaration.cpp +++ b/src/analysis/declaration.cpp @@ -37,7 +37,7 @@ namespace Analysis void analyseVarDecl(VarDeclNode *node, const WalkItem &wi, WalkItem &wo) { // need atleast one arg for check - if (!node->initial || command == FindArgs) + if (command == FindArgs) return; reportParmDeclNullPointer(node, node->initial, wi); diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 0fbb9c5..1a0593f 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -44,7 +44,7 @@ void analyseModifyExpr(ModifyExprNode *node, const WalkItem &wi, WalkItem &wo) if (node->args.empty() || command == FindArgs) return; - Node *arg = node->args[0]; + Node *arg = skipNop(node->args[0]); if (arg && arg->nodeType == INDIRECT_REF) { reportParmDeclNullPointer(node, diff --git a/src/analysis/ref.cpp b/src/analysis/ref.cpp index c8b45b8..8a5ea50 100644 --- a/src/analysis/ref.cpp +++ b/src/analysis/ref.cpp @@ -45,7 +45,7 @@ void analyseComponentRef(ComponentRefNode *node, const WalkItem &wi, WalkItem &w if (!node->object || command == FindArgs) return; - Node *arg = node->object; + Node *arg = skipNop(node->object); if (arg && arg->nodeType == INDIRECT_REF) { reportParmDeclNullPointer(node, diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp index 905b26f..fd1cbf2 100644 --- a/src/analysis/statement.cpp +++ b/src/analysis/statement.cpp @@ -47,9 +47,10 @@ void analyseIfStmt(IfStmtNode *node, const WalkItem &wi, WalkItem &wo) if (!node->condition || command == FindArgs) return; - if (node->condition->nodeType == EQ_EXPR) + Node *condNode = skipNop(node->condition); + if (condNode->nodeType == EQ_EXPR) { // if (... == ..) - EqExprNode *eq = static_cast<EqExprNode*>(node->condition); + EqExprNode *eq = static_cast<EqExprNode*>(condNode); // need atleast two operands for EQ_EXPR node if (eq->args.size() < 2) return; @@ -57,7 +58,7 @@ void analyseIfStmt(IfStmtNode *node, const WalkItem &wi, WalkItem &wo) // PARM_DECL? Node *node1 = skipNop(eq->args[0]); // INTEGER_CST? - Node *node2 = eq->args[1]; + Node *node2 = skipNop(eq->args[1]); // if (var == 0) if (node1 && node2 && @@ -88,17 +89,17 @@ void analyseIfStmt(IfStmtNode *node, const WalkItem &wi, WalkItem &wo) return; } } - else if (node->condition->nodeType == NE_EXPR) + else if (condNode->nodeType == NE_EXPR) { // if (... != ..) - NeExprNode *ne = static_cast<NeExprNode*>(node->condition); + NeExprNode *ne = static_cast<NeExprNode*>(condNode); // need atleast two operands for NE_EXPR node if (ne->args.size() < 2) return; // PARM_DECL? - Node *node1 = ne->args[0]; + Node *node1 = skipNop(ne->args[0]); // INTEGER_CST? - Node *node2 = ne->args[1]; + Node *node2 = skipNop(ne->args[1]); // if (var != 0) if (node1 && node2 && |