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 ) ...@@ -54,7 +54,7 @@ void BodyNotInBlock::traverseStatement( const Stmt* stmt, StmtParents& parents )
parents.push_back( *it ); parents.push_back( *it );
if( const IfStmt* ifstmt = dyn_cast< IfStmt >( *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 ); checkBody( ifstmt->getElse(), parents, 0 );
} }
else if( const WhileStmt* whilestmt = dyn_cast< WhileStmt >( *it )) else if( const WhileStmt* whilestmt = dyn_cast< WhileStmt >( *it ))
...@@ -70,7 +70,7 @@ void BodyNotInBlock::traverseStatement( const Stmt* stmt, StmtParents& parents ) ...@@ -70,7 +70,7 @@ void BodyNotInBlock::traverseStatement( const Stmt* stmt, StmtParents& parents )
parents.pop_back(); 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 ) if( body == NULL || parents.size() < 2 )
return; return;
...@@ -127,6 +127,11 @@ void BodyNotInBlock::checkBody( const Stmt* body, const StmtParents& parents, in ...@@ -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. // make it visible the two statements are not in the same body.
if( dyn_cast< CompoundStmt >( parents[ parent_pos ] )) if( dyn_cast< CompoundStmt >( parents[ parent_pos ] ))
return; 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 ...@@ -27,7 +27,7 @@ class BodyNotInBlock
private: private:
typedef std::vector< const Stmt* > StmtParents; typedef std::vector< const Stmt* > StmtParents;
void traverseStatement( const Stmt* stmt, StmtParents& parents ); 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 } // 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