diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 6a1e5416603..f9fba3b5c08 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -796,6 +796,9 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const Variable& var if (!membervar.empty()) { + if (mTokenizer->isCPP() && Token::simpleMatch(tok->astParent(), ">>")) + return true; + if (isMemberVariableAssignment(tok, membervar)) { checkRhs(tok, var, *alloc, number_of_if, membervar); return true; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index b7438c13692..1eb59cbedad 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -4987,6 +4987,14 @@ class TestUninitVar : public TestFixture { " return s.i;\n" "}\n"); ASSERT_EQUALS("", errout_str()); + + checkUninitVar("struct S { int a; };\n" // #13848 + "int f(std::istream& is) {\n" + " S s;\n" + " is >> s;\n" + " return s.a;\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void uninitvar2_while() {