diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 165f41cd4..ddc5f73dd 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -632,6 +632,8 @@ static ValueFlow::Value executeImpl(const Token* expr, ProgramMemory& pm, const if (MathLib::isFloat(expr->str())) return unknown; return ValueFlow::Value{MathLib::toLongNumber(expr->str())}; + } else if (expr->isBoolean()) { + return ValueFlow::Value{ expr->str() == "true" }; } else if (Token::Match(expr->tokAt(-2), ". %name% (") && astIsContainer(expr->tokAt(-2)->astOperand1())) { const Token* containerTok = expr->tokAt(-2)->astOperand1(); Library::Container::Yield yield = containerTok->valueType()->container->getYield(expr->strAt(-1)); diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 6a33395ae..a3255cd6c 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3623,6 +3623,17 @@ private: " if (a[i]) {}\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + valueFlowUninit("void f(void) {\n" + " char *c;\n" + " char x;\n" + " while (true) {\n" + " c = &x;\n" + " break;\n" + " }\n" + " ++c;\n" + "}", "test.c"); + ASSERT_EQUALS("", errout.str()); } void uninitStructMember() { // struct members