diff --git a/lib/checkcondition.cpp b/lib/checkcondition.cpp index 2beffb61e..d8b4218c6 100644 --- a/lib/checkcondition.cpp +++ b/lib/checkcondition.cpp @@ -426,7 +426,8 @@ void CheckCondition::oppositeInnerCondition() } if (Token::Match(tok->previous(), "++|--|& %var%")) break; - if (Token::Match(tok, "%var% . %var% (") && + if (tok->variable() && + Token::Match(tok, "%var% . %var% (") && !tok->variable()->isConst() && !(tok->tokAt(2)->function() && tok->tokAt(2)->function()->isConst)) break; diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 8ac0a8c8e..d2fded7f7 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -1091,6 +1091,18 @@ private: " }\n" "}"); ASSERT_EQUALS("", errout.str()); + + // #6385 "crash in Variable::getFlag()" + check("class TranslationHandler {\n" + "QTranslator *mTranslator;\n" + "void SetLanguage() {\n" + " if (mTranslator) {\n" + " qApp->removeTranslator(mTranslator);\n" + " }\n" + " }\n" + "};"); + ASSERT_EQUALS("", errout.str()); // just don't crash... + } // #5731 - fp when undeclared variable is used