summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-17 18:59:14 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-17 18:59:14 +0300
commit16e87211d7b45b372a6430b28637f2367cf89887 (patch)
tree49380e4210186fac5ae1b2485db15aeebc272f06 /src/analysis
parent5bdc7595e7e067625719b001babc34eb56d1383f (diff)
downloadparanucker-16e87211d7b45b372a6430b28637f2367cf89887.tar.gz
paranucker-16e87211d7b45b372a6430b28637f2367cf89887.tar.bz2
paranucker-16e87211d7b45b372a6430b28637f2367cf89887.tar.xz
paranucker-16e87211d7b45b372a6430b28637f2367cf89887.zip
Skip NOP_EXPR nodes in IF_STMT analysis.
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/analysis.cpp14
-rw-r--r--src/analysis/analysis.h2
-rw-r--r--src/analysis/statement.cpp2
3 files changed, 17 insertions, 1 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index 3d7a9de..a4d7aad 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -34,6 +34,7 @@
#include "nodes/expr/addr_expr.h"
#include "nodes/expr/modify_expr.h"
+#include "nodes/expr/nop_expr.h"
#include "nodes/expr/pointerplus_expr.h"
#include "nodes/ref/component_ref.h"
@@ -116,6 +117,19 @@ void reportParmDeclNullPointer(Node *mainNode,
}
}
+Node *skipNop(Node *node)
+{
+ while (node && node->nodeType == NOP_EXPR)
+ {
+ NopExprNode *nop = static_cast<NopExprNode*>(node);
+ if (nop && !nop->args.empty())
+ node = nop->args[0];
+ else
+ return nop;
+ }
+ return node;
+}
+
void analyseNode(Node *node, const WalkItem &wi, WalkItem &wo)
{
if (!node)
diff --git a/src/analysis/analysis.h b/src/analysis/analysis.h
index 87990f4..df954b2 100644
--- a/src/analysis/analysis.h
+++ b/src/analysis/analysis.h
@@ -40,6 +40,8 @@ namespace Analysis
const WalkItem &wi);
void removeCheckNullVars(WalkItem &wi);
+
+ Node *skipNop(Node *node);
}
#endif // ANALYSIS_ANALYSIS_H
diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp
index 8752edc..905b26f 100644
--- a/src/analysis/statement.cpp
+++ b/src/analysis/statement.cpp
@@ -55,7 +55,7 @@ void analyseIfStmt(IfStmtNode *node, const WalkItem &wi, WalkItem &wo)
return;
// PARM_DECL?
- Node *node1 = eq->args[0];
+ Node *node1 = skipNop(eq->args[0]);
// INTEGER_CST?
Node *node2 = eq->args[1];
// if (var == 0)