summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-03 18:18:50 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-03 18:18:50 +0300
commit6b02a2b9541703032eea12d268b66eb918c3e100 (patch)
treec9d83600358ad87139844e42e47f198ad2b5359b /src
parent848ae28c0ba53343e40092a1ffd241c412739b8c (diff)
downloadparanucker-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.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/expression.cpp10
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;