Kaydet (Commit) 7c4d3ea6 authored tarafından Luboš Luňák's avatar Luboš Luňák

don't check next statement after if body if there's also an else part

Change-Id: I04265acd821187f529562691f35ede93b84368fa
üst 4d3c6a04
......@@ -54,7 +54,7 @@ void BodyNotInBlock::traverseStatement( const Stmt* stmt, StmtParents& parents )
parents.push_back( *it );
if( const IfStmt* ifstmt = dyn_cast< IfStmt >( *it ))
{
checkBody( ifstmt->getThen(), parents, 0 );
checkBody( ifstmt->getThen(), parents, 0, ifstmt->getElse() != NULL );
checkBody( ifstmt->getElse(), parents, 0 );
}
else if( const WhileStmt* whilestmt = dyn_cast< WhileStmt >( *it ))
......@@ -70,7 +70,7 @@ void BodyNotInBlock::traverseStatement( const Stmt* stmt, StmtParents& parents )
parents.pop_back();
}
void BodyNotInBlock::checkBody( const Stmt* body, const StmtParents& parents, int stmtType )
void BodyNotInBlock::checkBody( const Stmt* body, const StmtParents& parents, int stmtType, bool dontGoUp )
{
if( body == NULL || parents.size() < 2 )
return;
......@@ -127,6 +127,11 @@ void BodyNotInBlock::checkBody( const Stmt* body, const StmtParents& parents, in
// make it visible the two statements are not in the same body.
if( dyn_cast< CompoundStmt >( parents[ parent_pos ] ))
return;
// If the body to be checked is a body of an if statement that has also
// an else part, don't go up, the else is after the body and should make
// it clear the body does not continue there.
if( dontGoUp )
return;
}
}
......
......@@ -27,7 +27,7 @@ class BodyNotInBlock
private:
typedef std::vector< const Stmt* > StmtParents;
void traverseStatement( const Stmt* stmt, StmtParents& parents );
void checkBody( const Stmt* body, const StmtParents& parents, int stmtType );
void checkBody( const Stmt* body, const StmtParents& parents, int stmtType, bool dontGoUp = false );
};
} // namespace
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment