[analyzer] Fixup for r185609: actually do suppress warnings coming out of std::list.

list is the name of a class, not a namespace. Change the test as well - the previous
version did not test properly.

Fixes radar://14317928.

llvm-svn: 185898
This commit is contained in:
Anna Zaks 2013-07-09 01:55:00 +00:00
parent 999af7bf6e
commit e0ad10404d
2 changed files with 11 additions and 5 deletions

View File

@ -1541,12 +1541,12 @@ LikelyFalsePositiveSuppressionBRVisitor::getEndPath(BugReporterContext &BRC,
// The analyzer issues a false use-after-free when std::list::pop_front
// or std::list::pop_back are called multiple times because we cannot
// reason about the internal invariants of the datastructure.
const DeclContext *DC =
D->getDeclContext()->getEnclosingNamespaceContext();
const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC);
if (ND && ND->getName() == "list") {
if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) {
const CXXRecordDecl *CD = MD->getParent();
if (CD->getName() == "list") {
BR.markInvalid(getTag(), 0);
return 0;
}
}
}
}

View File

@ -99,7 +99,13 @@ namespace std {
: private __list_imp<_Tp, _Alloc>
{
public:
void pop_front();
void pop_front() {
// Fake use-after-free.
// No warning is expected as we are suppressing warning comming
// out of std::list.
int z = 0;
z = 5/z;
}
bool empty() const;
};