From c234cace6d7415a3c10033e44d0172be57435811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 6 Oct 2013 08:20:10 +0200 Subject: [PATCH] Fixed #5064 (Tokenizer::simplifySizeof: Doesn't simplify 'sizeof !! (a==1);' properly) --- lib/tokenize.cpp | 12 ++++++++++-- test/testsimplifytokens.cpp | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 6c78aba93..7b4dc00cf 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3320,9 +3320,17 @@ bool Tokenizer::simplifySizeof() for (Token *tempToken = tok->next(); tempToken; tempToken = tempToken->next()) { if (tempToken->str() == "(") ++parlevel; - else if (tempToken->str() == ")") + else if (tempToken->str() == ")") { --parlevel; - if (Token::Match(tempToken, "%var%")) { + if (parlevel == 0 && !Token::Match(tempToken, ") . %var%")) { + // Ok, we should be clean. Add ) after tempToken + tok->insertToken("("); + tempToken->insertToken(")"); + Token::createMutualLinks(tok->next(), tempToken->next()); + break; + } + } + if (parlevel == 0 && Token::Match(tempToken, "%var%")) { while (tempToken && tempToken->next() && tempToken->next()->str() == "[") { tempToken = tempToken->next()->link(); } diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index bf9d2dbf5..ea0acc2bc 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -1325,6 +1325,9 @@ private: " int aa ; aa = sizeof ( * ( * a ) . b ) ; " "}"; ASSERT_EQUALS(expected, tok(code)); + + // #5064 - sizeof !! (a == 1); + ASSERT_EQUALS("sizeof ( ! ! ( a == 1 ) ) ;", tok("sizeof !!(a==1);")); } void sizeof15() {