summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-17 19:29:34 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-17 19:29:34 +0300
commit69caff6e1cefaa415efce5d07aa5b16971a64365 (patch)
tree8956af0c052d830704325e280351d096f8d04985 /src
parent14c42add529be98ba8c398db3a4cc1c490fe7d59 (diff)
downloadparanucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.gz
paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.bz2
paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.tar.xz
paranucker-69caff6e1cefaa415efce5d07aa5b16971a64365.zip
Skip NOP_EXPR in most analysis code.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/analysis.cpp1
-rw-r--r--src/analysis/declaration.cpp2
-rw-r--r--src/analysis/expression.cpp2
-rw-r--r--src/analysis/ref.cpp2
-rw-r--r--src/analysis/statement.cpp15
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 &&