diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/collections.cpp | 11 | ||||
-rw-r--r-- | src/analysis/collections.h | 3 | ||||
-rw-r--r-- | src/analysis/expression.cpp | 2 |
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 |