diff options
author | Andrei Karas <akaras@inbox.ru> | 2019-03-07 22:28:25 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2019-03-07 22:29:19 +0300 |
commit | 3a7fc8e3bf44b97fc584a295ead0534900851b0b (patch) | |
tree | 2c64216bdfcf213c781ede8e7d80c21a6d686997 /src/analysis/expression.cpp | |
parent | fedd0814d585b2d58695375a12b9fdca55de9f5e (diff) | |
download | paranucker-3a7fc8e3bf44b97fc584a295ead0534900851b0b.tar.gz paranucker-3a7fc8e3bf44b97fc584a295ead0534900851b0b.tar.bz2 paranucker-3a7fc8e3bf44b97fc584a295ead0534900851b0b.tar.xz paranucker-3a7fc8e3bf44b97fc584a295ead0534900851b0b.zip |
Add GOTO_EXPR
Some uncommited old changes...
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r-- | src/analysis/expression.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 4dd85bd..578dc8e 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -41,6 +41,7 @@ #include "nodes/expr/convert_expr.h" #include "nodes/expr/decl_expr.h" #include "nodes/expr/eq_expr.h" +#include "nodes/expr/goto_expr.h" #include "nodes/expr/init_expr.h" #include "nodes/expr/modify_expr.h" #include "nodes/expr/ne_expr.h" @@ -681,6 +682,8 @@ void analyseOrCondition(Node *node, Node *node1, Node *node2, const WalkItem &wi wo1.checkedElseNonNullVars.end()); wi2.knownVars.insert(wo1.checkedElseNullVars.begin(), wo1.checkedElseNullVars.end()); +// FOR_EACH(it, wi2.knownNonNullVars) +// Log::log("known non null: %s\n", it.c_str()); Log::dumpWI(node, "wi2 ", wi2); walkTree(node2, wi2, wo2); Log::dumpWI(node, "wo2 ", wo2); @@ -980,7 +983,7 @@ void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo) } } VarItem var = getVariableName(function); - if (!var.isNonNull) + if (!var.isNonNull && isNotIn(var.name, wo2.knownNonNullVars)) reportParmDeclNullPointer(node, function, wi); if (!getVariableName(function).empty()) enableCheck = false; @@ -1001,7 +1004,7 @@ void analyseCallExpr(CallExprNode *node, const WalkItem &wi, WalkItem &wo) VarItem var = getVariableName(node2); if (enableCheck) { - if (!var.isNonNull) + if (!var.isNonNull && isNotIn(var.name, wo2.knownNonNullVars)) reportParmDeclNullPointer(node, node2, wi); enableCheck = false; } @@ -1272,4 +1275,11 @@ void analyseInitExpr(InitExprNode* node, reportParmDeclLeftNullPointer(node, node->args[1], wi); } +void analyseGotoExpr(GotoExprNode *node, + const WalkItem &wi, + WalkItem &wo) +{ + wo.isContinued = true; +} + } |