diff --git a/src/tokenize.cpp b/src/tokenize.cpp index e5689cde7..238a7e1f3 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -2558,6 +2558,12 @@ bool Tokenizer::simplifyIfNot() if (tok->str() == "(" || tok->str() == "||" || tok->str() == "&&") { tok = tok->next(); + while (tok && tok->str() == "(") + tok = tok->next(); + + if (!tok) + break; + if (Token::simpleMatch(tok, "0 == (") || Token::Match(tok, "0 == %var%")) { diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index f79573542..e40f89494 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -1005,6 +1005,8 @@ private: ASSERT_EQUALS("if ( b ( ) && ! a )", simplifyIfNot("if( b() && 0 == a )")); ASSERT_EQUALS("if ( ! ( a = b ) )", simplifyIfNot("if((a=b)==0)")); ASSERT_EQUALS("if ( ! x . y )", simplifyIfNot("if(x.y==0)")); + ASSERT_EQUALS("if ( ( ! x ) )", simplifyIfNot("if((x==0))")); + ASSERT_EQUALS("if ( ( ! x ) && ! y )", simplifyIfNot("if((x==0) && y==0)")); }