summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/analysis/collections.cpp11
-rw-r--r--src/analysis/collections.h3
-rw-r--r--src/analysis/expression.cpp2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/analysis/collections.cpp b/src/analysis/collections.cpp
index d8d9510..b7acf6d 100644
--- a/src/analysis/collections.cpp
+++ b/src/analysis/collections.cpp
@@ -187,6 +187,17 @@ void addUnknownVar(WalkItem &wi,
wi.removeNullVarsAll.erase(var);
}
+void addNullVar(WalkItem &wi,
+ const std::string &var)
+{
+ wi.knownVars.insert(var);
+ wi.knownNullVars.insert(var);
+ wi.knownNonNullVars.erase(var);
+ wi.addNullVars.insert(var);
+ wi.removeNullVars.erase(var);
+ wi.removeNullVarsAll.erase(var);
+}
+
void addNonNullVar(WalkItem &wi,
const std::string &var)
{
diff --git a/src/analysis/collections.h b/src/analysis/collections.h
index 1e36bf0..feb0eca 100644
--- a/src/analysis/collections.h
+++ b/src/analysis/collections.h
@@ -42,6 +42,9 @@ namespace Analysis
void addNonNullVar(WalkItem &wi,
const std::string &var);
+ void addNullVar(WalkItem &wi,
+ const std::string &var);
+
void addLinkedVar(WalkItem &wi,
std::string parent,
const std::string &var);
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index ddbffb1..70b1666 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -806,6 +806,8 @@ void handleSetVar(Node *node1,
node2 = skipNop(node2);
if (node2 == CALL_EXPR && isPointerArg(node1))
handleSetVarToFunction(var1, node2, wo);
+ else if (node2 == INTEGER_CST && node2->label == "0")
+ addNullVar(wo, var1);
return;
}
else