diff --git a/lib/token.cpp b/lib/token.cpp index f36cad061..a5006d6e6 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -2126,7 +2126,7 @@ bool Token::addValue(const ValueFlow::Value &value) }); } - // assert(!value.isPossible() || !mImpl->mValues || std::none_of(mImpl->mValues->begin(), mImpl->mValues->end(), + // assert(value.isKnown() || !mImpl->mValues || std::none_of(mImpl->mValues->begin(), mImpl->mValues->end(), // [&](const ValueFlow::Value& x) { // return x.isKnown() && sameValueType(x, value); // })); diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 7be725a52..af217dc7d 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -4450,7 +4450,7 @@ static std::vector getConditions(const Token* tok, const char* op) return false; if (tok2->hasKnownIntValue()) return false; - if (Token::Match(tok2, "%var%") && !astIsBool(tok2)) + if (Token::Match(tok2, "%var%|.") && !astIsBool(tok2)) return false; return true; }); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 9707c2fcb..8509d3a41 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -6197,6 +6197,20 @@ private: "};\n" "void d::c(int) { e.clear(); }\n"; valueOfTok(code, "e"); + + code = "struct a {\n" + " int b;\n" + " int c;\n" + "} f;\n" + "unsigned g;\n" + "struct {\n" + " a d;\n" + "} e;\n" + "void h() {\n" + " if (g && f.c)\n" + " e.d.b = g - f.c;\n" + "}\n"; + valueOfTok(code, "e"); } void valueFlowHang() {