summaryrefslogtreecommitdiff
path: root/src/analysis/expression.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-04 19:25:49 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-04 19:25:49 +0300
commit44df3d185980c948c6823145f2f00a6b695d6719 (patch)
tree05c5be387205c04a34bd82689f29a40189b9f67e /src/analysis/expression.cpp
parentfe1495fe7f00ee88fbff638e152527940e1019da (diff)
downloadparanucker-44df3d185980c948c6823145f2f00a6b695d6719.tar.gz
paranucker-44df3d185980c948c6823145f2f00a6b695d6719.tar.bz2
paranucker-44df3d185980c948c6823145f2f00a6b695d6719.tar.xz
paranucker-44df3d185980c948c6823145f2f00a6b695d6719.zip
Fix false positive in complex conditions like if (expr1 || expr2 || expr3)
Diffstat (limited to 'src/analysis/expression.cpp')
-rw-r--r--src/analysis/expression.cpp30
1 files changed, 7 insertions, 23 deletions
diff --git a/src/analysis/expression.cpp b/src/analysis/expression.cpp
index 5225288..88ca3d7 100644
--- a/src/analysis/expression.cpp
+++ b/src/analysis/expression.cpp
@@ -360,34 +360,18 @@ void analyseOrCondition(Node *node, Node *node1, Node *node2, const WalkItem &wi
walkTree(node1, wi, wo1);
Log::dumpWI(node, "wo1 ", wo1);
WalkItem wi2 = wi;
- removeNeedCheckNullVarsSetAll(wi2, wo1.checkedThenNullVars);
- wi2.needCheckNullVars.insert(wo1.checkedThenNonNullVars.begin(),
- wo1.checkedThenNonNullVars.end());
- wi2.knownVars.insert(wo1.checkedThenNonNullVars.begin(),
- wo1.checkedThenNonNullVars.end());
- wi2.knownVars.insert(wo1.checkedThenNullVars.begin(),
- wo1.checkedThenNullVars.end());
+ removeNeedCheckNullVarsSetAll(wi2, wo1.checkedElseNonNullVars);
+ wi2.needCheckNullVars.insert(wo1.checkedElseNullVars.begin(),
+ wo1.checkedElseNullVars.end());
+ wi2.knownVars.insert(wo1.checkedElseNonNullVars.begin(),
+ wo1.checkedElseNonNullVars.end());
+ wi2.knownVars.insert(wo1.checkedElseNullVars.begin(),
+ wo1.checkedElseNullVars.end());
Log::dumpWI(node, "wi2 ", wi2);
walkTree(node2, wi2, wo2);
Log::dumpWI(node, "wo2 ", wo2);
- // probably condition wrong
-// if (wo1.cleanExpr)
-// mergeThenNullChecked(wo, wo1);
- // probably condition wrong
-// if (wo2.cleanExpr)
-// mergeThenNullChecked(wo, wo2);
-// if (wo1.cleanExpr && !wo2.cleanExpr)
-// {
-// mergeThenNonNullChecked(wo, wo1);
-// }
-// if (wo2.cleanExpr && !wo1.cleanExpr)
-// {
-// mergeThenNonNullChecked(wo, wo2);
-// }
intersectThenNonNullChecked(wo, wo1, wo2);
intersectThenNullChecked(wo, wo1, wo2);
-// intersectElseNonNullChecked(wo, wo1, wo2);
-// intersectElseNullChecked(wo, wo1, wo2);
if (!wo1.uselessExpr && !wo2.uselessExpr)
{ // need combine wo1 and wo2