diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-09 20:28:32 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-09 20:29:15 +0300 |
commit | 21bf666f861ffc3429459663af449a31efb25257 (patch) | |
tree | 89b117dca79d089d5ee6b3dfa64780f543e137c2 | |
parent | 480eb8add80045d6b4fd0804f7ec35a652e4fcf0 (diff) | |
download | paranucker-21bf666f861ffc3429459663af449a31efb25257.tar.gz paranucker-21bf666f861ffc3429459663af449a31efb25257.tar.bz2 paranucker-21bf666f861ffc3429459663af449a31efb25257.tar.xz paranucker-21bf666f861ffc3429459663af449a31efb25257.zip |
Add first warning to MODIFY_EXPR node analysis.
-rw-r--r-- | src/analysis/expression.cpp | 22 | ||||
-rw-r--r-- | src/includes.h | 2 | ||||
-rw-r--r-- | src/plugin.cpp | 1 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 6745a42..12af495 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -25,6 +25,7 @@ #include "analysis/analysis.h" #include "analysis/walkitem.h" +#include "nodes/expr/indirect_ref.h" #include "nodes/expr/modify_expr.h" #include <set> @@ -36,6 +37,27 @@ namespace Analysis WalkItem analyseModifyExpr(ModifyExprNode *node, WalkItem wi) { + // need atleast one arg for check + if (node->args.empty()) + return wi; + + Node *arg = node->args[0]; + if (arg->nodeType == INDIRECT_REF) + { + IndirectRefNode *refNode = static_cast<IndirectRefNode*>(arg); + // need atleast one arg for check + if (refNode->args.empty()) + return wi; + arg = refNode->args[0]; + if (arg->nodeType == PARM_DECL) + { + if (wi.checkNullVars.find(arg->label) != wi.checkNullVars.end()) + { + Log::warn(arg->location, "Using variable without check for NULL"); + } + } + } + return wi; } diff --git a/src/includes.h b/src/includes.h index 90cd1ca..ba436bc 100644 --- a/src/includes.h +++ b/src/includes.h @@ -43,4 +43,6 @@ #include "cp/cp-tree.h" +#include "diagnostic.h" + #endif // PLUGIN_H diff --git a/src/plugin.cpp b/src/plugin.cpp index 04715f0..48765f9 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -20,7 +20,6 @@ #include "includes.h" #include "plugin-version.h" -#include "diagnostic.h" #include "intl.h" #include "command.h" |