From 16e87211d7b45b372a6430b28637f2367cf89887 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 17 Jun 2015 18:59:14 +0300 Subject: Skip NOP_EXPR nodes in IF_STMT analysis. --- src/analysis/analysis.cpp | 14 ++++++++++++++ src/analysis/analysis.h | 2 ++ src/analysis/statement.cpp | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/analysis') 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(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) -- cgit v1.2.3-60-g2f50