summaryrefslogtreecommitdiff
path: root/src/analysis/statement.cpp
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/analysis/statement.cpp
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/analysis/statement.cpp')
-rw-r--r--src/analysis/statement.cpp15
1 files changed, 8 insertions, 7 deletions
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 &&