From 305760f143373fcc2dee01358b5fd47b1630a2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 16 Sep 2015 14:42:55 +0200 Subject: [PATCH] Uninitialized variables: Fix FP for struct array --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 27bf3e16c..805f34db1 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -849,7 +849,7 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, Alloc al return true; } else if (alloc != NO_ALLOC && Token::Match(vartok, "%var% [")) { const Token *parent = vartok->next()->astParent(); - while (Token::simpleMatch(parent, "[")) + while (Token::Match(parent, "[|.")) parent = parent->astParent(); if (Token::simpleMatch(parent, "&") && !parent->astOperand2()) return false; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index ba90e677f..9257de64e 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1435,6 +1435,15 @@ private: " bar(x);\n" "}"); ASSERT_EQUALS("", errout.str()); + + // struct + checkUninitVar("struct Fred { int x; int y; };\n" + "" + "void f() {\n" + " struct Fred fred[10];\n" + " fred[1].x = 0;\n" + "}", "test.c"); + ASSERT_EQUALS("", errout.str()); } void uninitvar_pointertoarray() {