diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 775e719c5..ed83336d5 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -309,7 +309,7 @@ static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Setti if (!parent) return; - if (parent->str() == "(" && tok == parent->link()->next()) { + if (parent->str() == "(" && !parent->astOperand2() && Token::Match(parent,"( %name%")) { const ValueType &valueType = ValueType::parseDecl(parent->next(), settings); if (valueType.pointer) setTokenValue(parent,value,settings); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 837b95a62..7b403bc6c 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -381,6 +381,7 @@ private: ASSERT(tokenValues("(UNKNOWN_TYPE)1000;","(").empty()); // don't know if there is truncation, sign extension ASSERT_EQUALS(255, valueOfTok("(unsigned char)~0;", "(").intvalue); ASSERT_EQUALS(0, valueOfTok("(int)0;", "(").intvalue); + ASSERT_EQUALS(3, valueOfTok("(int)(1+2);", "(").intvalue); ASSERT_EQUALS(0, valueOfTok("(UNKNOWN_TYPE*)0;","(").intvalue); ASSERT_EQUALS(100, valueOfTok("(int)100.0;", "(").intvalue);