diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-03 18:18:50 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-03 18:18:50 +0300 |
commit | 6b02a2b9541703032eea12d268b66eb918c3e100 (patch) | |
tree | c9d83600358ad87139844e42e47f198ad2b5359b | |
parent | 848ae28c0ba53343e40092a1ffd241c412739b8c (diff) | |
download | paranucker-6b02a2b9541703032eea12d268b66eb918c3e100.tar.gz paranucker-6b02a2b9541703032eea12d268b66eb918c3e100.tar.bz2 paranucker-6b02a2b9541703032eea12d268b66eb918c3e100.tar.xz paranucker-6b02a2b9541703032eea12d268b66eb918c3e100.zip |
Fix false positives in IF_STMT/WHILE_STMT condition if useless checks detected.
-rw-r--r-- | src/analysis/expression.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp index 57263d3..b2c250a 100644 --- a/src/analysis/expression.cpp +++ b/src/analysis/expression.cpp @@ -510,8 +510,13 @@ void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo) } } + wo.checkedThenNonNullVars.insert(var); + wo.checkedElseNullVars.insert(var); + wo.cleanExpr = true; + wo.uselessExpr = false; if (doReport) reportUselessCheck(node, var); + return; } } wo.cleanExpr = false; @@ -557,7 +562,12 @@ void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo) else if (isIn(var, wi.knownNullVars) || isIn(var, wi.knownNonNullVars)) { + wo.checkedThenNullVars.insert(var); + wo.checkedElseNonNullVars.insert(var); reportUselessCheck(node, var); + wo.cleanExpr = true; + wo.uselessExpr = false; + return; } } wo.cleanExpr = false; |