summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-19 20:26:51 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-19 20:26:51 +0300
commitf3ff43f7366553c9f3b64298e29f766dd7a1fbd6 (patch)
tree38d982e0bbfcfb348fa53e4ca73f8de1da51b9a8
parentf83110aecbabc9cf5ae9082f37bc27aec28ad285 (diff)
downloadparanucker-f3ff43f7366553c9f3b64298e29f766dd7a1fbd6.tar.gz
paranucker-f3ff43f7366553c9f3b64298e29f766dd7a1fbd6.tar.bz2
paranucker-f3ff43f7366553c9f3b64298e29f766dd7a1fbd6.tar.xz
paranucker-f3ff43f7366553c9f3b64298e29f766dd7a1fbd6.zip
Skip CLEANUP_POINT_EXPR node as other NOP nodes.
-rw-r--r--src/analysis/analysis.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/analysis/analysis.cpp b/src/analysis/analysis.cpp
index 6ccd658..8b76a6e 100644
--- a/src/analysis/analysis.cpp
+++ b/src/analysis/analysis.cpp
@@ -158,8 +158,9 @@ int findBackLocation(Node *node)
// skip all child nodes and return non nop child
Node *skipNop(Node *node)
{
- while (node &&
- (node == NOP_EXPR || node == NON_LVALUE_EXPR))
+ while (node == NOP_EXPR ||
+ node == NON_LVALUE_EXPR ||
+ node == CLEANUP_POINT_EXPR)
{
NopExprNode *nop = static_cast<NopExprNode*>(node);
if (nop && !nop->args.empty())
@@ -173,7 +174,9 @@ Node *skipNop(Node *node)
// skip all parent nop nodes and return first non nop parent
Node *skipBackNop(Node *node)
{
- while (node && node == NOP_EXPR)
+ while (node == NOP_EXPR ||
+ node == NON_LVALUE_EXPR ||
+ node == CLEANUP_POINT_EXPR)
{
node = node->parent;
}