diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-08-06 17:07:48 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-08-06 17:07:48 +0300 |
commit | 55d9267b23914ee282b0b81c54a6ffd5f408da81 (patch) | |
tree | 0dc0bb11f1a2e4b5df15b078f182a562264aa7fa /src/analysis | |
parent | 9929a11dab3def2cfe821a682a60f8c35193277f (diff) | |
download | paranucker-55d9267b23914ee282b0b81c54a6ffd5f408da81.tar.gz paranucker-55d9267b23914ee282b0b81c54a6ffd5f408da81.tar.bz2 paranucker-55d9267b23914ee282b0b81c54a6ffd5f408da81.tar.xz paranucker-55d9267b23914ee282b0b81c54a6ffd5f408da81.zip |
Fix false positive in return statment.
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/statement.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/analysis/statement.cpp b/src/analysis/statement.cpp index a5aba2d..281d8e5 100644 --- a/src/analysis/statement.cpp +++ b/src/analysis/statement.cpp @@ -56,6 +56,16 @@ void analyseCondition(Node *node, condNode = skipNop(condNode); thenNode = skipNop(thenNode); elseNode = skipNop(elseNode); + Node *const parent = skipBackNop(node->parent); + bool report(true); + + if (parent == INIT_EXPR && parent->parent) + { + if (skipBackNop(parent->parent) == RETURN_EXPR) + { + report = false; + } + } WalkItem wci = wi; WalkItem wco = wo; @@ -76,9 +86,12 @@ void analyseCondition(Node *node, wo2 = wi2; Log::dumpWI(node, "wi2 then ", wi2); - reportParmDeclNullPointer(node, - thenNode, - wi2); + if (report) + { + reportParmDeclNullPointer(node, + thenNode, + wi2); + } reportParmDeclLeftNullPointer(node, thenNode, wi2); walkTree(thenNode, wi2, wo2); Log::dumpWI(node, "wo2 then ", wo2); @@ -96,9 +109,12 @@ void analyseCondition(Node *node, wo3 = wi3; Log::dumpWI(node, "wi3 else ", wi3); - reportParmDeclNullPointer(node, - elseNode, - wi3); + if (report) + { + reportParmDeclNullPointer(node, + elseNode, + wi3); + } reportParmDeclLeftNullPointer(node, elseNode, wi3); walkTree(elseNode, wi3, wo3); Log::dumpWI(node, "wo3 else ", wo3); |