Fixed #9750 (Chained stream operation gives uninitvar error)
This commit is contained in:
parent
8c2c81dbcd
commit
120c572252
|
@ -1353,7 +1353,7 @@ bool isVariableChanged(const Token *tok, int indirect, const Settings *settings,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLikelyStreamRead(cpp, tok->previous()))
|
if (cpp && Token::simpleMatch(tok2->astParent(), ">>") && tok2->astParent()->astOperand2() == tok2 && isLikelyStreamRead(cpp, tok2->astParent()))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (isLikelyStream(cpp, tok2))
|
if (isLikelyStream(cpp, tok2))
|
||||||
|
|
|
@ -4242,13 +4242,25 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: a\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: a\n", errout.str());
|
||||||
|
|
||||||
|
// #9750
|
||||||
|
valueFlowUninit("struct S {\n"
|
||||||
|
" int one;\n"
|
||||||
|
" int two;\n"
|
||||||
|
"};\n"
|
||||||
|
"\n"
|
||||||
|
"void test(std::istringstream& in) {\n"
|
||||||
|
" S p;\n"
|
||||||
|
" in >> p.one >> p.two;\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
valueFlowUninit("struct S { int x; };\n" // #9417
|
valueFlowUninit("struct S { int x; };\n" // #9417
|
||||||
"void f() {\n"
|
"void f() {\n"
|
||||||
" S s;\n"
|
" S s;\n"
|
||||||
" return s(1);\n"
|
" return s(1);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
|
||||||
|
|
||||||
valueFlowUninit("void a() {\n" // asm
|
valueFlowUninit("void a() {\n" // asm
|
||||||
" int x;\n"
|
" int x;\n"
|
||||||
|
|
Loading…
Reference in New Issue