diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-04 19:25:49 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-04 19:25:49 +0300 |
commit | 44df3d185980c948c6823145f2f00a6b695d6719 (patch) | |
tree | 05c5be387205c04a34bd82689f29a40189b9f67e /src | |
parent | fe1495fe7f00ee88fbff638e152527940e1019da (diff) | |
download | paranucker-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')
-rw-r--r-- | src/analysis/expression.cpp | 30 |
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 |