diff --git a/lib/preprocessor.cpp b/lib/preprocessor.cpp index 4e19737d9..126f9b033 100644 --- a/lib/preprocessor.cpp +++ b/lib/preprocessor.cpp @@ -1551,7 +1551,8 @@ void Preprocessor::simplifyCondition(const std::map &c while (modified) { modified = false; - tokenizer.simplifyCalculations(); + modified |= tokenizer.simplifyCalculations(); + modified |= tokenizer.simplifyRedundantParenthesis(); for (Token *tok = const_cast(tokenizer.tokens()); tok; tok = tok->next()) { if (Token::Match(tok, "! %num%")) diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index 948f3ee7b..07c9115f4 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -204,7 +204,8 @@ private: TEST_CASE(ifdef_ifdefined); // define and then ifdef - TEST_CASE(define_if); + TEST_CASE(define_if1); + TEST_CASE(define_if2); TEST_CASE(define_ifdef); TEST_CASE(define_ifndef1); TEST_CASE(define_ifndef2); @@ -2528,7 +2529,7 @@ private: ASSERT_EQUALS(2, static_cast(actual.size())); } - void define_if() + void define_if1() { { const char filedata[] = "#define A 0\n" @@ -2546,6 +2547,16 @@ private: } } + void define_if2() + { + const char filedata[] = "#define A 22\n" + "#define B A\n" + "#if (B==A) || (B==C)\n" + "FOO\n" + "#endif"; + ASSERT_EQUALS("\n\n\nFOO\n\n", Preprocessor::getcode(filedata,"","",NULL,NULL)); + } + void define_ifdef() { {