From 432231148282d628021b8c09f7f9df1868c375d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 17 May 2021 11:50:31 +0200 Subject: [PATCH] Uninitialized variables; Fixed struct member access FP --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index d2bc19deb..66d4fd70b 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1023,7 +1023,7 @@ const Token* CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, while (Token::Match(valueExpr->astParent(), ".|::") && astIsRhs(valueExpr)) valueExpr = valueExpr->astParent(); if (!pointer) { - if (Token::Match(vartok, "%name% [.(]") && vartok->variable() && !vartok->variable()->isPointer() && vartok->variable()->isClass()) + if (Token::Match(vartok, "%name% [.(]") && vartok->variable() && !vartok->variable()->isPointer()) return nullptr; while (Token::simpleMatch(valueExpr->astParent(), ".") && astIsLhs(valueExpr) && valueExpr->astParent()->valueType() && valueExpr->astParent()->valueType()->pointer == 0) valueExpr = valueExpr->astParent(); diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index efe6e0e0d..9aaa024c1 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3590,6 +3590,12 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar("void f(void) {\n" + " struct tm t;\n" + " t.tm_year = 123;\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // return checkUninitVar("struct AB { int a; int b; };\n" "void f(void) {\n" @@ -4279,6 +4285,7 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + // struct valueFlowUninit("struct AB { int a; int b; };\n" "void f(void) {\n" " AB ab;\n"