Fixed #5173 (false positive Variable XX is reassigned a value before the old one has been used)

This commit is contained in:
Daniel Marjamäki 2013-11-14 16:10:00 +01:00
parent 126207f3e5
commit 203d3e916b
2 changed files with 12 additions and 2 deletions

View File

@ -626,9 +626,12 @@ static void eraseMemberAssignments(const unsigned int varId, std::map<unsigned i
{ {
const std::map<unsigned int, std::set<unsigned int> >::const_iterator it = membervars.find(varId); const std::map<unsigned int, std::set<unsigned int> >::const_iterator it = membervars.find(varId);
if (it != membervars.end()) { if (it != membervars.end()) {
const std::set<unsigned int> &v = it->second; const std::set<unsigned int> v = it->second;
for (std::set<unsigned int>::const_iterator vit = v.begin(); vit != v.end(); ++vit) for (std::set<unsigned int>::const_iterator vit = v.begin(); vit != v.end(); ++vit) {
varAssignments.erase(*vit); varAssignments.erase(*vit);
if (*vit != varId)
eraseMemberAssignments(*vit, membervars, varAssignments);
}
} }
} }

View File

@ -6417,6 +6417,13 @@ private:
"}"); "}");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
check("void f(struct AB *ab) {\n" // #
" ab->data->x = 1;\n"
" ab = &ab1;\n"
" ab->data->x = 2;\n"
"}");
ASSERT_EQUALS("", errout.str());
// don't crash // don't crash
check("struct data {\n" check("struct data {\n"
" struct { int i; } fc;\n" " struct { int i; } fc;\n"