summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analysis/expression.cpp22
-rw-r--r--src/includes.h2
-rw-r--r--src/plugin.cpp1
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"