From ca3095746cd6ef5abfa2b245c4dfa4d6c0791fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 4 Feb 2020 18:56:01 +0100 Subject: [PATCH] Fixed #9594 (False positive: Using argument that points at uninitialized variable when write only) --- lib/checkuninitvar.cpp | 4 +++- test/testuninitvar.cpp | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index e41b254e7..dbb734d47 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -990,6 +990,8 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, Alloc al possibleParent = getAstParentSkipPossibleCastAndAddressOf(possibleParent, &unknown); if (possibleParent && Token::Match(possibleParent->previous(), "decltype|sizeof (")) return false; + if (possibleParent && isLikelyStreamRead(mTokenizer->isCPP(), possibleParent)) + return false; } if (Token::Match(possibleParent, "[(,]")) { if (unknown) @@ -1401,7 +1403,7 @@ Check::FileInfo *CheckUninitVar::getFileInfo() const return nullptr; MyFileInfo *fileInfo = new MyFileInfo; - fileInfo->unsafeUsage = unsafeUsage ; + fileInfo->unsafeUsage = unsafeUsage; return fileInfo; } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 74cef3a6a..48855958d 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -4690,6 +4690,15 @@ private: " f(&x);\n" "}"); ASSERT_EQUALS("", errout.str()); + + ctu("void f(int *v) {\n" + " std::cin >> *v;\n" + "}\n" + "int main() {\n" + " int x;\n" + " f(&x);\n" + "}"); + ASSERT_EQUALS("", errout.str()); } };