summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-06-28 15:50:54 +0300
committerAndrei Karas <akaras@inbox.ru>2015-06-28 15:50:54 +0300
commit51b8da0ae10161612c368bd76a8d611b89f04e67 (patch)
treedcbfa88f60256d55f8279e9b46a6d95d85502510 /src/analysis/expression.cpp
parentdee5cf7bc6a5e1ffc813c81caac1f711b9d6093e (diff)
downloadparanucker-51b8da0ae10161612c368bd76a8d611b89f04e67.tar.gz
paranucker-51b8da0ae10161612c368bd76a8d611b89f04e67.tar.bz2
paranucker-51b8da0ae10161612c368bd76a8d611b89f04e67.tar.xz
paranucker-51b8da0ae10161612c368bd76a8d611b89f04e67.zip
Add warning for more than one checks for non null variables.
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index e521615..4683dee 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -193,18 +193,22 @@ void analyseNeExpr(NeExprNode *node, const WalkItem &wi, WalkItem &wo)
// if (var != 0)
if (!var.empty() &&
node2 == INTEGER_CST &&
- wi.checkNullVars.find(var) != wi.checkNullVars.end() &&
node2->label == "0")
{
- wo.checkedNonNullVars.insert(var);
- wo.cleanExpr = true;
- wo.uselessExpr = false;
- }
- else
- {
- wo.cleanExpr = false;
- wo.uselessExpr = true;
+ if (wi.checkNullVars.find(var) != wi.checkNullVars.end())
+ {
+ wo.checkedNonNullVars.insert(var);
+ wo.cleanExpr = true;
+ wo.uselessExpr = false;
+ return;
+ }
+ else if (wi.knownVars.find(var) != wi.knownVars.end())
+ {
+ reportUselessCheck(node, var);
+ }
}
+ wo.cleanExpr = false;
+ wo.uselessExpr = true;
}
void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
@@ -221,18 +225,18 @@ void analyseEqExpr(EqExprNode *node, const WalkItem &wi, WalkItem &wo)
// if (var == 0)
if (!var.empty() &&
node2 == INTEGER_CST &&
- wi.checkNullVars.find(var) != wi.checkNullVars.end() &&
node2->label == "0")
{
- wo.checkedNullVars.insert(var);
- wo.cleanExpr = true;
- wo.uselessExpr = false;
- }
- else
- {
- wo.cleanExpr = false;
- wo.uselessExpr = true;
+ if (wi.checkNullVars.find(var) != wi.checkNullVars.end())
+ {
+ wo.checkedNullVars.insert(var);
+ wo.cleanExpr = true;
+ wo.uselessExpr = false;
+ return;
+ }
}
+ wo.cleanExpr = false;
+ wo.uselessExpr = true;
}
void analyseOrCondition(Node *node, Node *node1, Node *node2, const WalkItem &wi, WalkItem &wo)