diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 90e3268a3..7a1045baa 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1397,6 +1397,9 @@ bool CheckUninitVar::checkScopeForVariable(const Scope* scope, const Token *tok, if (isMemberVariableUsage(tok, var.isPointer(), membervar)) uninitStructMemberError(tok, tok->str() + "." + membervar); + else if (Token::Match(tok->previous(), "[(,] %var% [,)]")) + return true; + } else { // Use variable if (!suppressErrors && isVariableUsage(tok, var.isPointer(), _tokenizer->isCPP())) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index e92e133d6..2adb164ff 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2506,6 +2506,15 @@ private: " a(&c);\n" "}"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar2("struct ABC { int a; };\n" // struct initialization + "void clear(struct ABC &abc);\n" + "int f() {\n" + " struct ABC abc;\n" + " clear(abc);\n" + " return abc.a;\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void uninitvar2_value() {